可能重复:
为什么不能降低java子类中方法的可见性?
为什么我可以private在子类中使用publicwhen 覆盖超类中的 方法,但是我不能将超public类中的private方法覆盖到子类中的方法中?
为什么?
先感谢您.
Joa*_*uer 11
覆盖方法不能降低可见性.允许这样做会违反Liskov替换原则,该原则声明(简化)派生类的所有对象B必须具有与基类相同的属性A.在这种情况下,一个这样的"财产"将是一种公共方法foo,如果B采用相同的方法,它将会"丢失" ,但却成功了protected.
此外,由于private方法不是继承的(尝试从派生类调用它!)它们不能被覆盖.您可以使用public与private基类中的方法同名的方法,但这不是覆盖,它只是一个具有相同名称的新方法,而不是其他关系.调用private基类中的方法不会调用public超类中的方法,即使在超类的对象上执行也是如此!
换句话说:private方法永远不会使用运行时多态性.
看这个样本:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
执行new Sub().callBoth()输出时将是:
Base.foo Sub.bar
| 归档时间: |
|
| 查看次数: |
3838 次 |
| 最近记录: |