为什么我们应该扩大覆盖方法的可访问性?如果超类具有受保护的方法,而子类具有与公共相同的方法。为什么会发生?
问问题
244 次
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 回答