// Override a private method
public class PrivateOverride {
private void f() {
System.out.print("private f()");
}
public static void main(String[] args) {
PrivateOverride po = new PrivateOverride();
po.f();
derived.f();
System.out.print(derived.f(1));
}
}
class Derived extends PrivateOverride {
// 私有方法不能覆写,此处相当于创建了一个新方法
public void f() { System.out.print("public f()"); }
// 私有方法也不能被重载,此处相当于创建了一个新方法
// 但与Derived中的void f()方法是重载关系
public int f(int i) { return i; }
}
【结果】
我们希望输出的是public f()
,但是由于private方法被自动认为是final方法,而且是导出类屏蔽的。因此,在这种情况下,Derived类中的f()方法就是一个全新的方法;既然基类中的方法在子类中Derived中不可见,因此甚至也不能被重载。
结论:只有非private方法才可以被覆盖。在导出类中,对于基类中的private方法,最好采用不同的名字。