java static方法不能被重寫原因
阿新 • • 發佈:2018-12-10
重寫方法的目的是為了多型,或者說:重寫是實現多型的前提,即重寫是發生在繼承中且是針對非static方法的。
語法上子類允許出現和父類只有方法體不一樣其他都一模一樣的static方法,但是在父類引用指向子類物件時,通過父類引用呼叫的依然是父類的static方法,而不是子類的static方法。
即:語法上static支援重寫,但是執行效果上達不到多型目的 class Father { public static void staticMethod() { System.out.println(“Father”); } }
class Son extends Father { // @Override 因為從邏輯上達不到重寫的目的,所以這裡新增 @Override 會編譯報錯 public static void staticMethod() { System.out.println(“Son”); } }
public class M { public static void main(String[] args) { Father mByFather = new Father(); Father mBySon = new Son(); Son son = new Son();
mByFather.staticMethod();
mBySon.staticMethod(); // 這裡返回的是Father而不是Son, static方法上重寫不會報錯,但是從邏輯執行效果上來看達不到多型的目的
son.staticMethod();
}
}