? Java中的成員內部類(也稱為非靜態內部類)是定義在另一個類(外部類)內部的類。
這種內部類與它的外部類之間有著緊密的聯系,主要體現在幾個方面:它可以訪問外部類的所有成員(包括私有成員),并且它的實例自動持有外部類實例的引用。下面詳細講解Java中的成員內部類:
1. 定義成員內部類
成員內部類定義在外部類的任何方法之外,通常作為外部類的一個成員存在。它不能包含靜態成員(除了靜態常量),因為成員內部類實例總是依賴于外部類實例。
public class Outer {private int age=18;public static String a;//成員內部類public class Inner{public String name;private int age=28;public void test(){System.out.println(age);System.out.println(a);int age=38;System.out.println(age);//38System.out.println(this.age);//28System.out.println(Outer.this.age);//18}}
}
?
2. 訪問外部類成員
1.成員內部類可以直接訪問外部類的所有成員(包括私有成員),而無需任何特殊語法。
2.可以在成員內部類的實例方法中,拿到當前外部類對象,格式:外部類名.this
3. 創建成員內部類實例
? 要創建成員內部類的實例,你需要先創建外部類的實例,然后通過外部類實例來創建內部類實例。這是因為成員內部類的實例總是與外部類的一個實例相關聯。
public class test1 {public static void main(String[] args) {Outer.Inner in=new Demo1().new Inner();in.test();}
}
?
4. 成員內部類的用途
- 封裝:成員內部類提供了一種將邏輯緊密相關的類組織在一起的方式,從而增強了代碼的封裝性。
- 回調:成員內部類可以作為回調接口的實現,這樣可以避免在外部類中創建大量僅用于回調的匿名內部類。
- 訪問控制:通過內部類,可以隱藏一些實現細節,同時允許在包級別或類級別控制訪問。
5. 注意事項
- 成員內部類不能聲明為
static
,因為靜態成員屬于類本身,而非類的實例。如果需要靜態內部類,應使用靜態內部類(也稱為嵌套類)。 - 成員內部類實例的創建總是依賴于外部類實例,因此它們之間的生命周期也是緊密相關的。
- 成員內部類可以訪問外部類的
this
引用,但不能直接訪問外部類的靜態成員(除非通過外部類名訪問)。
?