有这样一个例子:
public class PrivateOverride {
private void f() { System.out.println("private f()"); }
public static main(String[] args) {
PrivateOverride po = new Derived();
po.f();
}
}
class Derived extends PrivateOverride {
public void f() { System.out.println("public f()"); }
}
输出结果为private f()
解答:如果基类中的f方法不是private,那么 po.f();应该调用的是子类的f方法;
但是如果基类的f方法为private,那么该方法对于子类来说是不可见的,所以子类的f方法并不是重写了基类的f方法,而是另一个f方法,只不过和基类的 f名字相同,因为他不知道基类有f方法,所以基类也不知道子类有f方法,所以在 po.f();时,就会认为子类没有f方法,所以就调用的基类的f方法。