可能的重复:
为什么不能降低java子类中方法的可见性? https://stackoverflow.com/questions/1600667/why-cant-you-reduce-the-visibility-of-a-method-in-a-java-subclass
我怎么可以重写private
超类中的方法public
当在子类中时,但我无法覆盖public
超类中的方法private
子类中的方法?
Why?
先感谢您。
重写方法永远不会降低可见性。允许这样做将违反里氏替换原则 http://en.wikipedia.org/wiki/Liskov_substitution_principle,它指出(简化的)派生类的所有对象B
必须与基类具有相同的属性A
。在这种情况下,这样的“属性”将是一种公共方法foo
如果B
有同样的方法,但做到了protected
.
另外,自从private
方法不是继承的(尝试从派生类调用它!)它们永远不能被重写。你可以有一个public
与 a 同名的方法private
基类中的一个,但这并不是重写,它只是一个具有相同名称的新方法,但没有其他关系。致电private
基类中的方法将not打电话给public
超类中的方法,即使在超类的对象上执行!
换句话说:private
方法never使用运行时多态性。
请参阅此示例:
public static class Base {
public void callBoth() {
foo();
bar();
}
private void foo() {
System.out.println("Base.foo");
}
protected void bar() {
System.out.println("Base.bar");
}
}
public static class Sub extends Base {
public void foo() {
System.out.println("Sub.foo");
}
public void bar() {
System.out.println("Sub.bar");
}
}
执行时new Sub().callBoth()
输出将是这样的:
Base.foo
Sub.bar
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)