今天在Github上看到這樣一句話讓我一下沒反應過來:如果父類方法訪問修飾符為 private/final/static 則子類就不能重寫該方法,但是被 static 修飾的方法能夠被再次聲明。
我尋思着static方法不是不能重寫嗎?於是做了如下實驗:
1 class Base { 2 public static String staticBase() { 3 return "Base-staticBase()"; 4 } 5 6 public String normal() { 7 return "Base-normal()"; 8 } 9 } 10 11 class Son extends Base{ 12 public static String staticBase() { 13 return "Son-staticBase()"; 14 } 15 16 public String normal() { 17 return "son-normal()"; 18 } 19 } 20 21 public class StaticTest { 22 public static void main(String[] args) { 23 Base son = new Son(); 24 System.out.println(son.staticBase()); 25 System.out.println(son.normal()); 26 } 27 }
結果如下:
可以看見靜態方法依舊沒有被重寫,他只是被重復聲明,相當於另一個方法,與原來不相干,寫着寫着突然明白了...