为什么我们应该扩大被覆盖方法的可访问性?如果超类具有受保护的方法,并且子类与public具有相同的方法。为什么要发生?
答案 0 :(得分: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.
}
答案 1 :(得分:1)
因为在对象层次结构中,JVM将始终运行Overridden方法。如果无法访问被覆盖的方法,那么它就没用了。
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.
}
}
答案 2 :(得分:1)
声明为private或static的方法无法覆盖!
注释@Override表示方法声明旨在覆盖超类中的方法声明。如果使用此批注类型注释方法但不覆盖超类方法,则编译器需要生成错误消息。
每次覆盖方法时都使用它以获得两个好处。这样,如果您犯了一个错误拼写方法名称或者没有正确匹配参数的常见错误,您将收到警告,您的方法实际上并没有像您认为的那样覆盖。其次,它使您的代码更容易理解,因为当覆盖方法时更加明显。 在Java 1.6中,您可以使用它来标记方法何时实现具有相同优点的接口。