我們通過下面**來測試:
class parent
}class children extends parent}
class main
}測試結果
parent
parent
children
**(1),(3)測試如常,很容易理解,看似並沒有什麼不同
而**(2)顯示的結果卻是parent。
按照常理來說應該是children,為什麼會是parent?
這是因為用static修飾的方法不能被重寫,**(3)測試結果之所以會是children是因為它相當於自己定義了乙個a()函式,注意這個函式並不是parent裡的a()函式,(就像 現實中兩個名字相同的學生一樣,他們只是名字相同並非同乙個人),這就解釋了為什麼**三會的到children而紅色**二會得到parent。
Java的靜態方法不能被重寫(詳解!)
靜態方法,可以通過類直接呼叫 是屬於類的方法,靜態方法在 中的呼叫方式一般形式是 math.abs 當然通過引用該型別物件的變數也可以呼叫,只是通常不這樣使用 例項方法,只能通過物件呼叫 重寫的目的在於父類引用可以根據子類物件的執行時實際型別不同而呼叫不同實現 從而表現出多型。並且,靜態方法無需建立...
Java 軍規 2 靜態方法不能被重寫
在第一條軍規中說過,重寫方法必需新增 override 註解,如果在不遵守第一條軍規的前提下你是可以及時發下靜態方法是不可以被重寫的 而如果你沒有遵守第一條軍規時,你試圖重寫靜態方法,此時在編譯器是不可能發現該錯誤的。假設有這樣乙個基類寫道 public class base public void...
靜態方法不能被重寫 覆蓋,只能被隱藏
為了說明這個例子,下面看一段 class parent public void print2 class child extends parent public void print2 public class main 我們知道,如果乙個類被宣告為父類,例項 new 卻為子類,那麼它呼叫父類中被覆...