在一次面試中,有人問你是否可以實例化一個抽象類別。傳統上,你會回答「不」。然而,令你驚訝的是,面試官說這是可能的。
為了示範這一點,請考慮以下程式碼:
abstract class my { public void mymethod() { System.out.print("Abstract"); } } class poly { public static void main(String a[]) { my m = new my() {}; m.mymethod(); } }
儘管 my 上有抽象修飾符,但您可以使用下列指令建立它的實例一個匿名子類別。您實質上是動態建立一個子類,並將其引用指派給抽象類別參考 m。
根據Java 語言規格(JLS):
「如果類別實例建立表達式以類別結尾,那麼
被實例化的類別是匿名類別。」
所以,在這種情況下,被實例化的類別不是匿名類別。 my,但是一個匿名子類別。
可以透過編譯程式碼並檢查產生的類別檔案來確認此行為。您會注意到一個名為 Poly$1.class 的新類別文件,它對應於執行階段建立的匿名子類別。
因此,雖然您無法直接實例化抽象類,但可以透過建立匿名子類別。
以上是Java中抽象類別可以實例化嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!