继承中的覆盖方法

时间:2013-12-25 10:57:11

标签: java inheritance override

我的代码:

public class PrivateOverride {

private void f() {
    System.out.println("private f()");
}

public static void main(String[] args) {
    PrivateOverride po = new derived();
    po.f();
   }
}

class derived extends PrivateOverride {

public void f() {
    System.out.println("public f()");
    }
}

输出:     private f()

为什么?

4 个答案:

答案 0 :(得分:7)

由于derived#f() 未覆盖父级的私有f()方法。

您可以通过向f()类中的derived方法添加@Override注释来确认它,并确保它不会编译。

额外提示
覆盖方法f(),它应该是来自父类的继承,即子类中的 visible ,从来都不是这样的私有方法。

this table总结了正确方法覆盖的其他规则。

答案 1 :(得分:2)

derived无法看到PrivateOverride的{​​{1}},因为它是私有的,因此这不是重写,而是新方法的定义。始终建议在重写方法上添加注释f(),以避免此类隐藏问题。

答案 2 :(得分:2)

f中的方法PrivateOverride被声明为private。这意味着它不会在derived类中被覆盖。

这就是你应该使用@Override注释的原因。在这种情况下,它会显示错误。

答案 3 :(得分:0)

因为私有方法不能在子类中继承,所以无法覆盖它。