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。

  方法重写时,子类的访问权限必须大于父类

 

posted @ 2017-08-30 18:56  低谷还能再向下  阅读(923)  评论(0编辑  收藏  举报