在 Java 中,將一個類定義在另一個類內部,或定義在方法內部,稱為內部類。它是一個獨立的類,編譯後生成獨立的 .class 文件(如 Outer$Inner.class)。
| 類型 | 定義位置 | 訪問外部類成員 | 典型應用 |
|---|---|---|---|
| 成員內部類 | 類內部、方法外部 | 可直接訪問所有成員(含 private) | 實現邏輯緊密耦合的輔助類 |
| 靜態內部類 | 類內部、方法外部,帶 static | 僅能訪問外部類 static 成員 | 獨立性強的輔助類、Builder 模式 |
| 局部內部類 | 方法內部、代碼塊內部 | 可訪問外部類所有成員及 final 局部變量 | 方法內部複雜邏輯封裝 |
| 匿名內部類 | 方法內部、表達式中 | 同局部內部類,無構造器 | 事件監聽、線程創建、接口臨時實現 |
內部類對象持有對外部類對象的隱式引用(除靜態內部類外),因此能直接訪問外部類的所有成員,包括 private。這是內部類區別於普通類的唯一核心優勢,實現了「封裝邊界的內部穿透」。
非靜態內部類實例不能獨立存在,必須依附於一個外部類實例。創建語法:Outer.Inner inner = outer.new Inner();。
static 內部類,減少外部引用持有,防止內存洩漏。WeakReference。