Java--不可覆盖的方法
私有方法不能被覆盖:
因为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。
方法重写时,子类的访问权限必须大于父类。
人生如水,不争高山,自然愈下,三年又三年。——struggle!