1. 程式人生 > >java----內部類分類

java----內部類分類

1.成員內部類----成員方法

*******成員內部類不能存在任何static變數或方法,可以訪問外部類的靜態變數

成員內部類需要依附外部類new outter().new inner();

內部類可以使用private封裝,表示私有內部類,該內部類只供外部類使用.

2.靜態內部類----靜態方法

a.靜態內部類的建立不需要外部類,可以直接建立。

b.靜態內部類不可以訪問外部類的任何非static變數

******不能訪問非靜態變數,可以存在自己的成員變數。

static定義一個靜態內部類

class Outer{ //外部類
    private static String msg="hello world";
   static class Inner{ //定義一個靜態內部類
        public void print(){
            System.out.println(msg);
        }
    }
    public void fun(){//在外部類中定義一個方法,該方法負責產生內部類物件並呼叫print方法
        Inner in=new Inner();
        in.print();
    }
}
public class hehe{
    public static void main(String[]args){
        Outer out=new Outer();//外部類物件
        out.fun();//外部類方法
    }
}

3.方法內部類---成員內部類(沒有靜態變數)

1. 區域性內類不允許使用訪問許可權修飾符 public private protected 均不允許。

2. 區域性內部類對外(方法外)完全隱藏,除了建立這個類的方法可以訪問它其他的地方是不允許訪問的。

3. 區域性內部類要想使用方法形參,該形參必須用final宣告(JDK8形參變為隱式final宣告).

class Outter {
    private int num;
    public void display(final int test) {//test最終變數
    class Inner { //不能加任何修飾
    private void fun() {
    num++;
    System.out.println(num);
    System.out.println(test);
    }
    }
    new Inner().fun();
    }
    }
    public class mytest {
    public static void main(String[] args) {
    Outter out = new Outter();
    out.display(20);
    }
}

4.匿名內部類

是方法內部類的特殊版本

1. 匿名內部類是沒有訪問修飾符的。

2. 匿名內部類必須繼承一個抽象類或者實現一個介面

3. 匿名內部類中不能存在任何靜態成員或方法

4. 匿名內部類是沒有構造方法的,因為它沒有類名。

5. 與區域性內部相同匿名內部類也可以引用方法形參。此形參也必須宣告為 final.

interface MyInterface {
    void test();
    }
    class Outter {
    private int num;
    public void display(int para) {
    // 匿名內部類,實現了MyInterface介面
    new MyInterface(){
    public void test() {
    System.out.println("匿名內部類"+para);
    }
    }.test();
    }
    }
    public class mytest{
    public static void main(String[] args) {
    Outter outter = new Outter();
    outter.display(20);
    }
}

內部類的特點:

1. 破壞了程式的結構

2. 方便進行私有屬性的訪問。(外部類也可以訪問內部類的私有域)

3. 如果發現類名稱上出現了".",應當立即想到內部類的概念。