【发布时间】:2012-04-21 20:33:56
【问题描述】:
为什么我们应该扩大覆盖方法的可访问性?如果超类具有受保护的方法,而子类具有与公共相同的方法。为什么会发生?
【问题讨论】:
-
私有方法在子类中不可用,也不向客户端公开。子类中的公共方法是完全不同的方法。
标签: java
为什么我们应该扩大覆盖方法的可访问性?如果超类具有受保护的方法,而子类具有与公共相同的方法。为什么会发生?
【问题讨论】:
标签: java
这是一种不同的方法!子类不继承私有方法!所以你根本没有“压倒一切”。您只是在定义一个与超类中的私有方法同名的方法。
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.
}
【讨论】:
因为在对象层次结构中,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.
}
}
【讨论】:
声明为私有或静态的方法不能被覆盖!
注解@Override 表示方法声明旨在覆盖超类中的方法声明。如果使用此注解类型对方法进行注解但未覆盖超类方法,则编译器需要生成错误消息。
每次重写方法时使用它有两个好处。这样,如果您犯了拼写错误的方法名称或未正确匹配参数的常见错误,您将被警告您的方法实际上并没有像您认为的那样覆盖。其次,它使您的代码更容易理解,因为当方法被覆盖时它会更加明显。 在 Java 1.6 中,您可以使用它来标记方法何时实现接口以获得相同的好处。
【讨论】: