面試高頻考點,一句話區分:
new Person(); — 已有類定義,僅創建實例無變量引用new Person() { String name; }; — **現場定義類體**(字段/方法),同時創建實例能否說出類的名字?說不出 → 匿名類/對象。
若類體在 new 表達式內部定義 → 匿名類;若類體在別處預定義 → 匿名對象。
| 場景 | 用法 | 類型 |
|---|---|---|
| 一次性監聽器 | btn.setOnClickListener(new OnClickListener(){...}) | 匿名類 |
| 臨時數據容器 | list.add(new Object(){int x=1;}); | 匿名類 |
| 僅需一次的工具對象 | new ArrayList().add("x"); | 匿名對象 |
Java 8 前無匿名方法概念。Lambda 表達式 () -> {} 可視為函數式接口的匿名實現,本質仍是匿名類語法糖。