C++ 嵌套類僅是命名空間管理,無外部引用、無默認訪問權限。Java 內部類:
private)。
public class Sequence {
private Object[] o; // 外部私有字段
private int next = 0;
public void add(Object x) { if (next < o.length) o[next++] = x; }
private class SSelector implements Selector { // 實現外部接口
int i = 0;
public boolean end() { return i == o.length; } // 直接訪問 o.length
public Object current() { return o[i]; } // 直接訪問 o[i]
public void next() { if (i < o.length) i++; }
}
public Selector getSelector() { return new SSelector(); }
}
SSelector 方法直接使用 o,無需參數傳遞、無需 Sequence.this.o 顯式限定。編譯器自動注入外部引用完成綁定。
OuterClass outerRef。new SSelector() 實為 new SSelector(this)。outerRef.member。無外部實例無法創建非靜態內部類實例。靜態方法中直接 new Inner() 會編譯報錯(因無 this)。
C++ 嵌套類:僅名字隱藏,無引用,無特權訪問。
Java 內部類:隱式引用 + 完全訪問權 = 外部類的「非靜態成員」。