Java 中靜態方法的繼承
Java 中繼承的文檔解釋了成員是根據其可訪問性來繼承的。然而,靜態方法似乎存在差異。
根據文檔,靜態方法不是繼承的。但下面的程式碼示範了可以在子類別中存取靜態方法:
class A { public static void display() { System.out.println("Inside static method of superclass"); } } class B extends A { public void show() { // This works - accessing display() by its simple name - // meaning it is inherited according to the book. display(); } }
這怎麼可能?
答案在於Java中繼承的底層實作。所有可存取的方法都由子類別繼承,無論其類型為何(靜態或實例)。然而,靜態方法和實例方法的繼承之間有一個微妙的差異。
當在子類別中定義具有相同簽章的新靜態方法時,舊的靜態方法將被隱藏而不是被覆寫。這意味著從子類別呼叫時新的靜態方法優先。不過,原來的靜態方法仍然可以使用超類別名來存取。
相反,當子類別中重寫實例方法時,新的實例方法會完全取代舊的實例方法。這就是為什麼繼承的實例方法無法在子類別中透過其簡單名稱進行存取。
因此,儘管 Java 文件中沒有明確提及靜態方法是繼承的,但它們與所有其他可訪問成員一起隱式繼承。靜態方法繼承的唯一差異是它們可以被子類別中具有相同簽名的靜態方法隱藏。
以上是Java中的靜態方法可以繼承嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!