自 JDK 1.1 引入以來,內部類不僅是「語法糖」,更是實現封裝、回調、迭代器等設計模式的關鍵工具。它允許類定義嵌套在另一個類內部,從而:
private)定義:帶 static 修飾的內部類。
特性:
Outer.this 引用static 成員public/private/default 訪問控制適用場景:作為外部類的輔助類,且不依賴外部實例狀態。如 LinkedList.Entry 節點類。
定義:無 static 修飾的內部類。
特性:
Outer.this 顯式獲取外部實例static 成員(static final 常量除外)interface(隱式為 static)實例化語法:Outer.Inner inner = outer.new Inner();
適用場景:實現外部類的公共接口,需頻繁訪問外部狀態。如 AbstractList.Itr 迭代器實現。
定義:定義在方法、構造器或初始化塊內部的類。
特性:
final 或「實際上 final」的局部變量(生命週期管理)interface分類:方法內定義為「局部成員類」(有外部實例綁定);靜態方法/塊內定義為「局部靜態類」(無外部實例綁定)。
定義:無名的局部類,定義與實例化合為一條語句。
語法:new Interface/Class() { ... }
核心用途:就地實現接口或繼承類,常用於事件監聽器、Runnable、Comparator 等一次性行為定義。
public class Tester {
private int valueRate = 2;
private class PContent implements Contents { // 成員類訪問外部實例字段
private int i = 11 * valueRate;
public int value() { return i; }
}
protected class PDestination implements Destination { ... }
public Destination dest(String s) { return new PDestination(s); }
public Contents cont() { return new PContent(); }
}
若 PContent 改為 static,則無法訪問非靜態 valueRate,編譯報錯。