代碼中內部類的 end()、current()、next() 方法使用了 objects 變量,書籍註釋稱「這些方法用到了 objects,這是一個引用」,讀者誤以為「這三個方法是引用」,實則指 objects 是對外部類字段的引用。
OuterClass.this)。objects 是外部類的字段,不屬於內部類,內部類只是「借用」訪問。// 編譯器自動生成的構造函數
public InnerClass(OuterClass outer) {
this$0 = outer; // 隱式引用字段
}
// 內部類方法訪問外部字段
public Object current() {
return this$0.objects[index]; // 實際訪問路徑
}
| 誤區 | 事實 |
|---|---|
| 內部類方法「是」引用 | 內部類實例「持有」外部實例引用,方法通過它訪問外部字段 |
| 內部類複製了外部字段 | 無複製,直接訪問同一內存地址 |
| 靜態內部類也能訪問外部實例字段 | 靜態內部類無隱式引用,只能訪問外部靜態成員 |