首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 抽象類實例化疑問:為何匿名內部類可實例化抽象類?

     編輯:程式設計綜合問答

現象描述

代碼中定義了抽象類 E,並在 main 方法中使用 new E() { } 語法創建對象,程序正常運行並輸出結果。這似乎違背了「抽象類不能實例化」的規定。

核心解釋

new E() { } 並非直接實例化抽象類,而是創建了一個匿名內部類,該內部類隱式繼承了抽象類 E 並實現了其所有抽象方法(若有)。編譯器會自動生成一個繼承自 E 的具體類,因此可以實例化。

關鍵點

  • 抽象類本身不可實例化,但其非抽象子類可以。
  • 匿名內部類語法 new 抽象類() { 方法實現 } 會隱式定義一個子類並立即創建實例。
  • 若抽象類包含抽象方法,匿名內部類必須提供實現,否則編譯報錯。

總結

這是一種語法糖,本質上仍遵循「實例化的是子類」的原則,並未打破 Java 的類型系統規則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved