Java中的override问题
有这样一个例子:
?
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方法。