1.15 实例内部类
生活随笔
收集整理的這篇文章主要介紹了
1.15 实例内部类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實例內部類是指沒有用 static 修飾的內部類,有的地方也稱為非靜態內部類。示例代碼如下:
public class Outer {class Inner {// 實例內部類} }上述示例中的 Inner 類就是實例內部類。實例內部類有如下特點。
1)在外部類的靜態方法和外部類以外的其他類中,必須通過外部類的實例創建內部類的實例。
public class Outer {class Inner1 {}Inner1 i = new Inner1(); // 不需要創建外部類實例public void method1() {Inner1 i = new Inner1(); // 不需要創建外部類實例}public static void method2() {Inner1 i = new Outer().new inner1(); // 需要創建外部類實例}class Inner2 {Inner1 i = new Inner1(); // 不需要創建外部類實例} } class OtherClass {Outer.Inner i = new Outer().new Inner(); // 需要創建外部類實例 }2)在實例內部類中,可以訪問外部類的所有成員。
public class Outer {public int a = 100;static int b = 100;final int c = 100;private int d = 100;public String method1() {return "實例方法1";}public static String method2() {return "靜態方法2";}class Inner {int a2 = a + 1; // 訪問public的aint b2 = b + 1; // 訪問static的bint c2 = c + 1; // 訪問final的cint d2 = d + 1; // 訪問private的dString str1 = method1(); // 訪問實例方法method1String str2 = method2(); // 訪問靜態方法method2}public static void main(String[] args) {Inner i = new Outer().new Inner(); // 創建內部類實例System.out.println(i.a2); // 輸出101System.out.println(i.b2); // 輸出101System.out.println(i.c2); // 輸出101System.out.println(i.d2); // 輸出101System.out.println(i.str1); // 輸出實例方法1System.out.println(i.str2); // 輸出靜態方法2} }提示:如果有多層嵌套,則內部類可以訪問所有外部類的成員。
3)在外部類中不能直接訪問內部類的成員,而必須通過內部類的實例去訪問。如果類 A 包含內部類 B,類 B 中包含內部類 C,則在類 A 中不能直接訪問類 C,而應該通過類 B 的實例去訪問類 C。
4)外部類實例與內部類實例是一對多的關系,也就是說一個內部類實例只對應一個外部類實例,而一個外部類實例則可以對應多個內部類實例。
如果實例內部類 B 與外部類 A 包含有同名的成員 t,則在類 B 中 t 和 this.t 都表示 B 中的成員 t,而 A.this.t 表示 A 中的成員 t。
public class Outer {int a = 10;class Inner {int a = 20;int b1 = a;int b2 = this.a;int b3 = Outer.this.a;}public static void main(String[] args) {Inner i = new Outer().new Inner();System.out.println(i.b1); // 輸出20System.out.println(i.b2); // 輸出20System.out.println(i.b3); // 輸出10} }5)在實例內部類中不能定義 static 成員,除非同時使用 final 和 static 修飾。
總結
以上是生活随笔為你收集整理的1.15 实例内部类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.14 java内部类是什么鬼东西
- 下一篇: 1.16 静态内部类