1. 程式人生 > >java static方法不能被重寫原因

java static方法不能被重寫原因

重寫方法的目的是為了多型,或者說:重寫是實現多型的前提,即重寫是發生在繼承中且是針對非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();
}

}