继承中的覆盖方法

Saj*_*jad 3 java inheritance overriding

我的代码:

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()");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出: private f()

为什么?

kir*_*wka 7

因为derived#f() 不会覆盖父类的私有f()方法.

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

额外提示:
覆盖方法f(),它应该从父类继承,即在子类中可见,这对私有方法来说绝对不是这样.

此表中汇总了用于正确方法重写的其他规则.