私有方法不能被覆蓋: 因為private被自動認為final,對子類是屏蔽的,那麼子類中的相同方法就是一個新的方法,編譯器不會報錯但也不會按期望運行: 輸出為A。public、protected或預設情況下輸出都為B。 靜態方法不能被覆蓋: 靜態方法是與類,而非單個的對象的關聯。單個對象調用靜態方法 ...
私有方法不能被覆蓋:
因為private被自動認為final,對子類是屏蔽的,那麼子類中的相同方法就是一個新的方法,編譯器不會報錯但也不會按期望運行:
1 public class ClassA { 2 private void func() 3 { 4 System.out.println("A"); 5 } 6 public static void main(String[] args) { 7 ClassA a=new B(); 8 a.func(); 9 } 10 } 11 class B extends ClassA{ 12 public void func() 13 { 14 System.out.println("B"); 15 } 16 }
輸出為A。public、protected或預設情況下輸出都為B。
靜態方法不能被覆蓋:
靜態方法是與類,而非單個的對象的關聯。單個對象調用靜態方法編譯不會出錯。
1 public class ClassA { 2 public static void func() 3 { 4 System.out.println("A"); 5 } 6 public static void main(String[] args) { 7 ClassA a=new B(); 8 a.func(); 9 } 10 } 11 class B extends ClassA{ 12 public static void func() 13 { 14 System.out.println("B"); 15 } 16 }
輸出為A。
方法重寫時,子類的訪問許可權必須大於父類。