Java 子類能否重寫(覆蓋)父類的靜態方法?
阿新 • • 發佈:2019-02-06
答案是不能重寫,也就是不能被覆蓋!
但是,與例項方法一樣,子類能把父類的靜態方法繼承過來。
父類程式碼:
public class StaticParent {
public static int a = 0;
public static void printA() {
System.out.println("In Parent, a = " + a);
}
}
①子類不重寫:
public class StaticSon extends StaticParent { public static void main(String[] args) { printA(); } }
執行結果:
②子類重定義靜態方法:
public class StaticSon extends StaticParent {
public static void main(String[] args) {
printA();
}
// @Override
public static void printA() {
System.out.println("In son a = " + a);
}
}
執行結果:
③子類覆蓋父類的靜態方法,這裡用到了Java的重寫標記(@Override),它表示下面的方法必須重寫父類的方法:
public class StaticSon extends StaticParent { public static void main(String[] args) { printA(); } @Override public static void printA() { System.out.println("In son a = " + a); } }
執行結果:
小結: 靜態方法不能被覆蓋(情況③)。但是子類可以重新定義父類的靜態方法,並將父類的靜態方法遮蔽掉(情況②)。
取消遮蔽可以使用 父類名.靜態方法名的方式呼叫,如本例中:
參考: Java語言程式設計(基礎篇) 10版 11章 11.4節 357頁public class StaticSon extends StaticParent { public static void main(String[] args) { printA(); } //@Override public static void printA() { System.out.println("In son a = " + a); StaticParent.printA(); // call } }