Sau*_*akh 30 java oop inheritance
public class PrivateOverride {
private void f() {
System.out.println("private f()");
}
}
public class Derived extends PrivateOverride {
public void f() { //this method is never run.
System.out.println("public f()");
}
}
public static void main(String[] args) {
// instantiate Derived and assign it to
// object po of type PrivateOverride.
PrivateOverride po = new Derived();
// invoke method f of object po. It
// chooses to run the private method of PrivateOveride
// instead of Derived
po.f();
}
}
Run Code Online (Sandbox Code Playgroud)
所以,这段代码的输出是private f().现在,问题出现在我的脑海中:作为Derived Class 对象的po如何调用PrivateOverride的私有方法,它是它的基类?
Pét*_*zon 45
因为您在PrivateOverride类中定义了main方法.如果将main方法放在Derived类中,它将无法编译,因为.f()在那里不可见.
po.f()PrivateOverride类中的调用不是多态,因为f()在PrivateOverride类中private,所以f()在Derived类中不会覆盖.