靜態方法為什麼不能被重寫

2022-08-21 14:30:12 字數 617 閱讀 9100

首先我們來測試,猜下下面程式的執行結果...

1

//該類測試靜態方法為什麼不能被重寫

2public

class

test1_static 13}

1415

16class

father 20}

2122

class child extends

father

26 }

列印結果:

fathermethod

childmethod

fathermethod

相信前兩個列印結果大家都已經猜到了,但是最後乙個結果相信有不少小夥伴會產生疑惑,甚至做出錯誤的判斷,其實乙個指向子類物件的父類引用變數來呼叫父子同名的靜態方法時,只會呼叫父類的靜態方法。這是因為靜態方法只能被繼承,不能被重寫,如果子類有和父類相同的靜態方法,那麼父類的靜態方法將會被隱藏,對於子類不可見,也就是說,子類和父類中相同的靜態方法是沒有關係的方法,他們的行為不具有多型性。但是父類的靜態方法可以通過父類.方法名呼叫。

關於靜態方法為什麼不能被重寫的一點思考以及overload的一些坑。

靜態方法不能被重寫 覆蓋,只能被隱藏

為了說明這個例子,下面看一段 class parent public void print2 class child extends parent public void print2 public class main 我們知道,如果乙個類被宣告為父類,例項 new 卻為子類,那麼它呼叫父類中被覆...

Java的靜態方法不能被重寫(詳解!)

靜態方法,可以通過類直接呼叫 是屬於類的方法,靜態方法在 中的呼叫方式一般形式是 math.abs 當然通過引用該型別物件的變數也可以呼叫,只是通常不這樣使用 例項方法,只能通過物件呼叫 重寫的目的在於父類引用可以根據子類物件的執行時實際型別不同而呼叫不同實現 從而表現出多型。並且,靜態方法無需建立...

Java 軍規 2 靜態方法不能被重寫

在第一條軍規中說過,重寫方法必需新增 override 註解,如果在不遵守第一條軍規的前提下你是可以及時發下靜態方法是不可以被重寫的 而如果你沒有遵守第一條軍規時,你試圖重寫靜態方法,此時在編譯器是不可能發現該錯誤的。假設有這樣乙個基類寫道 public class base public void...