在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫(Override)。方法重寫又稱方法覆蓋。
public class Test {
public static void main(String[] args) {
/**
* 結論:
* 靜態方法可以被繼承,但是不能被覆蓋,即不能重寫。
* */
Son.staticMethod(); // 運行結果:Father staticMethod
}
}
class Father {
public static void staticMethod() {
System.out.println("Father staticMethod");
}
}
class Son extends Father {
}
public class Test {
public static void main(String[] args) {
Father.staticMethod(); // 運行結果:Father staticMethod
/**
* 結論:
* 類執行了自己申明的靜態方法。
* 該子類實際上只是將父類中的同名靜態方法進行了隱藏,而非重寫。
* */
Son.staticMethod(); // 運行結果:Son staticMethod
Father father = new Son();
/**
* 結論:
* 父類引用指向子類對象時,只會調用父類的靜態方法。
* 父類和子類中含有的其實是兩個沒有關系的方法,它們的行為也並不具有多態性。
* */
father.staticMethod(); // 運行結果:Father staticMethod
}
}
class Father {
public static void staticMethod() {
System.out.println("Father staticMethod");
}
}
class Son extends Father {
public static void staticMethod() {
System.out.println("Son staticMethod");
}
}
總結:
- 在Java中靜態方法可以被繼承,但是不能被覆蓋,即不能重寫。
- 如果子類中也含有一個返回類型、方法名、參數列表均與之相同的靜態方法,那么該子類實際上只是將父類中的該同名方法進行了隱藏,而非重寫。
- 父類引用指向子類對象時,只會調用父類的靜態方法。所以,它們的行為也並不具有多態性。