Java 類別變數覆蓋難題
考慮以下 Java程式碼片段:
<br>class爸爸{<pre class="brush:php;toolbar:false">protected static String me = "dad"; public void printMe() { System.out.println(me); }
}
class Son 擴充了爸爸{
protected static String me = "son";
}
} public void doIt() {new Son().printMe();
}
為什麼「doIt()」會印「dad」?
在 Java 中,類別變數不能被覆寫。相反,它們是隱藏的。具體來說,當在子類別中宣告具有現有名稱的類別變數時,子類別會隱藏繼承的類別變量,從而有效地建立一個與其父類別同名但不同的新類別變數。重寫與隱藏
覆蓋涉及為子類中的方法提供不同的實現,以覆蓋超類中的方法。相較之下,隱藏涉及在子類別中使用相同的變數名,但它隱藏了從超類別繼承的變量,並在子類別中本地創建一個新變數。如何列印「son」?
為了實現列印「son」的所需行為,不能覆寫類別變數。相反,可以使用其他繼承技術,例如:有建構子參數的範例:
private String name; public Person(String name) { this.name = name; } public void printName() { System.out.println(name); }
}
以上是為什麼Java的靜態變數繼承會產生意想不到的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!