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

2021-08-02 06:31:12 字數 717 閱讀 1778

靜態方法,可以通過類直接呼叫(是屬於類的方法,靜態方法在**中的呼叫方式一般形式是:math.abs(); 當然通過引用該型別物件的變數也可以呼叫,只是通常不這樣使用);

例項方法,只能通過物件呼叫;

重寫的目的在於父類引用可以根據子類物件的執行時實際型別不同而呼叫不同實現**,從而表現出多型。並且,靜態方法無需建立物件即可使用,而重寫的方法發揮作用,需要父類引用,和(不同的)子類物件。

千言萬語,不如**:

結果,很明顯了。如果是重寫的話,x.show();的執行結果應該是static method of b,但實際上是「static method of a」。x.show(); 呼叫的是變數x所宣告型別 「a「中的方法,並不是x執行時所引用物件的實際型別「b」中的方法。還有一點值得注意,我們提到使用變數名(而不是型別名)的方式呼叫靜態方法,呼叫的靜態方法和變數宣告的型別有關;

如果該變數所宣告的類及父類中都包含相同的靜態方法,則呼叫該變數所宣告的類的靜態方法,可以理解為從父類繼承來的靜態方法被隱藏了,但是如果該變數所宣告的類中不包含,它的父類中包含該靜態方法,則變數實際呼叫的是從父類繼承來的靜態方法。

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

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

java中父類的靜態方法不能被重寫

我們通過下面 來測試 class parent class children extends parent class main 測試結果 parent parent children 1 3 測試如常,很容易理解,看似並沒有什麼不同 而 2 顯示的結果卻是parent。按照常理來說應該是child...

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

首先我們來測試,猜下下面程式的執行結果.1 該類測試靜態方法為什麼不能被重寫 2public class test1 static 13 1415 16class father 20 2122 class child extends father 26 列印結果 fathermethod child...