在 Java 學習初期,許多開發者容易混淆「匿名對象」與「匿名類」這兩個概念,甚至誤以為存在「匿名方法」。本文將通過代碼示例清晰劃分兩者的定義、用途與核心差異,幫助你建立扎實的基礎認知。
匿名對象指沒有變量名引用的對象實例。它只能使用一次,創建後若不賦值給變量,便無法再次調用其成員。
// Person 類已定義好屬性與方法
new Person(); // 這就是一個匿名對象
特點:
new Scanner(System.in).nextInt();匿名類是在聲明對象的同時,動態定義並實例化一個類。它本質上是一個隱式繼承某父類或實現某介面的子類,且無類名。
// 匿名類:現場定義字段與方法
new Person() {
String name = "匿名類實例";
void sayHello() {
System.out.println("Hello from " + name);
}
};
特點:
new關鍵字後跟隨大括號{},內部可定義字段、方法button.setOnClickListener(new View.OnClickListener() { ... });| 維度 | 匿名對象 | 匿名類 |
|---|---|---|
| 定義方式 | new 類名(); | new 類名/介面() { ... } |
| 類結構 | 使用現成類定義 | 現場動態構建類結構 |
| 複用性 | 不可複用(無引用) | 同樣不可複用,但邏輯可定製 |
| 典型場景 | 一次性工具調用 | 回調、策略模式、臨時重寫行為 |
Java 8 前不存在匿名方法。Java 8 引入 Lambda 表達式 可視為匿名方法的語法糖,但本質上仍是匿名類(函數式介面)的簡寫。
記住口訣:「對象是實例,類是模板」。匿名對象是「用完即扔」的現成實例;匿名類是「現做現賣」的定製化子類。掌握這一區別,能讓你在處理事件驅動、多線程等場景時更得心應手。