1. 程式人生 > >Java 子類能否重寫(覆蓋)父類的靜態方法?

Java 子類能否重寫(覆蓋)父類的靜態方法?

答案是不能重寫,也就是不能被覆蓋!

但是,與例項方法一樣,子類能把父類的靜態方法繼承過來。

父類程式碼:

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);
	}
}

執行結果:


小結: 靜態方法不能被覆蓋(情況③)。但是子類可以重新定義父類的靜態方法,並將父類的靜態方法遮蔽掉(情況②)。

取消遮蔽可以使用   父類名.靜態方法名的方式呼叫,如本例中:

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 
	}
}
參考: Java語言程式設計(基礎篇) 10版    11章 11.4節  357頁