首頁 > Java > java教程 > 我們可以在Java中實例化抽象類別嗎?

我們可以在Java中實例化抽象類別嗎?

Patricia Arquette
發布: 2024-12-07 10:57:16
原創
768 人瀏覽過

Can We Instantiate an Abstract Class in Java?

我們能否實例化一個抽象類別:深入探討

在傳統理解中,抽象類別是無法實例化的。但最近的一次訪談難題帶來了不同的觀點。讓我們用一個實際的例子來深入研究這個有趣的問題:

abstract class My {
    public void mymethod() {
        System.out.print("Abstract");
    }
}

class Poly {
    public static void main(String a[]) {
        My m = new My() {};
        m.mymethod();
    }
}
登入後複製

與傳統概念相反,在這種情況下可以實例化一個抽象類別。然而,有一個微妙的區別:我們不是實例化抽象類別本身,而是創建它的匿名子類別

理解匿名子類別

匿名子類別是擴充或實作指定超類別或介面的未命名內部類別。在上面的程式碼中:

  • new My() 建立一個擴充 My 的匿名子類別的實例。
  • 類體 {} 讓我們可以專門為此定義方法和欄位instance.
  • m是匿名子類別實例的引用,存取其重寫的mymethod().

透過編譯進行驗證

要驗證此行為,請考慮編譯程式碼。在編譯的輸出中,我們會注意到:

  • My.class: 抽象類別的字節碼。
  • Poly.class: 封閉的字節碼class.
  • Poly$1.class: 匿名子類別的字節碼。

Poly$1.class 的存在確認了匿名子類別的實例化,而不是抽象類別本身。

Java 語言規格支援

Java 語言規格(JLS) 在第15.9.1 節中明確提到了匿名子類別:「正在實例化的類別是匿名子類。 >

雖然抽象類別不能直接實例化,但它們可以透過匿名子類別進行擴展,從而允許使用自訂方法和欄位建立實例。這種細微差別是理解和利用 Java 物件導向概念的寶貴工具。

以上是我們可以在Java中實例化抽象類別嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板