代碼中定義了抽象類 E,並在 main 方法中使用 new E() { } 語法創建對象,程序正常運行並輸出結果。這似乎違背了「抽象類不能實例化」的規定。
new E() { } 並非直接實例化抽象類,而是創建了一個匿名內部類,該內部類隱式繼承了抽象類 E 並實現了其所有抽象方法(若有)。編譯器會自動生成一個繼承自 E 的具體類,因此可以實例化。
new 抽象類() { 方法實現 } 會隱式定義一個子類並立即創建實例。這是一種語法糖,本質上仍遵循「實例化的是子類」的原則,並未打破 Java 的類型系統規則。