為了說明這個例子,下面看一段**:
class
parent
public
void
print2()
}class
child
extends
parent
public
void
print2()
}public
class
main
}
(我們知道,如果乙個類被宣告為父類,例項(new)卻為子類,那麼它呼叫父類中被覆蓋的方法,那麼實際呼叫是子類中的方法。而乙個類被宣告為父類,例項(new)也為父類,則它呼叫父類中被覆蓋的方法,實際上仍為父類中的方法。)
我們可以看到靜態方法沒有被覆蓋/重寫,pc宣告為父類,而new的子類。本來應該實現子類中的方法,但pc.print1 ()
的結果為parent print1
,這不是子類方法中的結果,這是因為print1被宣告為了static,沒有被重寫。而cc宣告為子類,所以cc.print1 ()
才是子類中的結果,這裡父類中的print1被隱藏而不是被重寫/覆蓋。
靜態方法為什麼不能被重寫
首先我們來測試,猜下下面程式的執行結果.1 該類測試靜態方法為什麼不能被重寫 2public class test1 static 13 1415 16class father 20 2122 class child extends father 26 列印結果 fathermethod child...
Java的靜態方法不能被重寫(詳解!)
靜態方法,可以通過類直接呼叫 是屬於類的方法,靜態方法在 中的呼叫方式一般形式是 math.abs 當然通過引用該型別物件的變數也可以呼叫,只是通常不這樣使用 例項方法,只能通過物件呼叫 重寫的目的在於父類引用可以根據子類物件的執行時實際型別不同而呼叫不同實現 從而表現出多型。並且,靜態方法無需建立...
Java 軍規 2 靜態方法不能被重寫
在第一條軍規中說過,重寫方法必需新增 override 註解,如果在不遵守第一條軍規的前提下你是可以及時發下靜態方法是不可以被重寫的 而如果你沒有遵守第一條軍規時,你試圖重寫靜態方法,此時在編譯器是不可能發現該錯誤的。假設有這樣乙個基類寫道 public class base public void...