-2

为什么我们应该扩大覆盖方法的可访问性?如果超类具有受保护的方法,而子类具有与公共相同的方法。为什么会发生?

4

3 回答 3

3

这是不同的方法!子类不继承私有方法!所以你根本没有“压倒一切”。您只是在定义一个与超类中的私有方法同名的方法。

 class A
   {
      private void myMethod() { }
   }

 class B extends A
   {
     public void myMethod() { } // a completely different method. Has nothing to do with the above method. It is not an override. 
   }
于 2012-04-09T13:16:38.133 回答
1

因为在对象层次结构中,JVM 将始终运行 Overriden 方法。如果您的覆盖方法不可访问,那么它是无用的。

public class A{
    void A(){}
}
public class B extends A{
    private void A(){} //this makes no sence and its impossible
    PSV main(String ..){
        A a = new B();
        a.A(); //error as JVM cannot call overriden method which is private.
    }
}
于 2012-04-09T13:17:04.303 回答
1

声明为私有或静态的方法不能被覆盖!

注解@Override 表示方法声明旨在覆盖超类中的方法声明。如果一个方法被这个注解类型注解但没有覆盖超类方法,编译器需要生成一个错误信息。

每次重写方法时使用它有两个好处。这样,如果您犯了拼写错误的方法名称或未正确匹配参数的常见错误,您将被警告您的方法实际上并没有像您认为的那样覆盖。其次,它使您的代码更容易理解,因为当方法被覆盖时它会更加明显。在 Java 1.6 中,您可以使用它来标记方法何时实现接口以获得相同的好处。

于 2012-04-09T13:22:03.897 回答