«Переопределение» частных методов с вызовом upcasting в Java
public class PrivateOverride {
private void f() {
System.out.println("PrivateOverride f()");
}
public static void main(String[] args) {
PrivateOverride po = new DerivedWithOutD();
po.d();// PrivateOverride f()
PrivateOverride poD = new DerivedWithD();
poD.d();//Derived f()
}
public void d() {
f();
}
}
class DerivedWithOutD extends PrivateOverride {
public void f() {
System.out.println("Derived f()");
}
}
class DerivedWithD extends PrivateOverride {
public void f() {
System.out.println("Derived f()");
}
public void d() {
f();
}
}
Как показывают приведенные выше коды, когда DerivedWithOutD не переопределяет метод d (), он вызывает функцию f (), принадлежащую PrivateOverride, потому что метод f () класса PrivateOverride не может быть переопределен? Но d () наследуется от PrivateOverride должен принадлежать DerivedWithOutD, почему d () вызывает private f ()? И почему класс DerivedWithD, кажется, делает переопределение, и может вызвать public f ()? Кроме того, когда я изменяю f () PrivateOverride на public, все это выводит Derived f (), это смущает меня сейчас!