匿名內部類是沒有名字的內部類,語法形式為:
new 父類類型/接口類型(參數列表) {
// 類體:實現抽象方法、重寫方法、定義新成員
}
它隱式繼承指定父類或隱式實現指定接口,並當場創建實例。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 處理點擊邏輯
}
});
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("異步任務執行");
}
};
executor.execute(task);
public Comparator getComparator() {
return new Comparator() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
};
}
{ ... } 完成初始化OuterClass$1.class對於函數式接口(單一抽象方法),Lambda 更簡潔:
// 匿名內部類
executor.execute(new Runnable() {
@Override public void run() { System.out.println("Hi"); }
});
// Lambda
executor.execute(() -> System.out.println("Hi"));
但匿名內部類仍適用於:需實現多個方法、需繼承類而非接口、需在類體中定義輔助字段/方法等場景。
匿名內部類不僅用於參數列表,本質是即時定義並實例化一個一次性類。理解其語法本質與捕獲變量規則,配合 Lambda 靈活選擇,是 Java 開發進階關鍵。