OuterClass.this。// 非靜態成員內部類
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner(); // 必須依賴外部類實例
// 靜態內部類
Outer.StaticInner staticInner = new Outer.StaticInner(); // 無需外部類實例
| 修飾符 | 效果 | 訪問限制 |
|---|---|---|
| private | 封裝於外部類內部,外部不可直接實例化 | 僅外部類內部可 new |
| protected / default / public | 控制外部類可見性 | 同包/子類/全局可見 |
| static | 成為靜態內部類(巢狀類) | 只能直接訪問外部類 static 成員;可獨立實例化 |
class Outer {
private static int x = 3;
static class Inner {
static void func() { System.out.println("inner: " + x); }
}
static class Inner2 {
void show() { System.out.println("inner2 show"); }
}
public static void method() {
Inner.func(); // 靜態方法直接呼叫
new Inner2().show(); // 非靜態方法需實例化
}
}
// 外部類調用
Outer.method(); // 呼叫靜態方法
Outer.Inner.func(); // 直接呼叫靜態內部類的靜態方法
new Outer.Inner2().show(); // 實例化非靜態內部類並呼叫實例方法
static 成員(欄位/方法),該內部類必須宣告為 static。static 方法訪問內部類時,該內部類必須是 static。final 或 effectively final 的區域變數。static 內部類或提升為頂層類。掌握內部類的實例化語法、修飾符語義與訪問規則,能寫出封裝性更好、記憶體更安全的 Java 程式碼。