"Anulando" métodos privados con llamada ascendente en 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();
}
}
Como muestran los códigos anteriores, cuando DerivedWithOutD no anula el método d (), llama a f () pertenece a PrivateOverride, ¿es porque el método f () de PrivateOverride no se puede anular? Pero la d () hereda de PrivateOverride debería pertenecer a DerivedWithOutD, ¿por qué d () llama al privado f ()? ¿Y por qué la clase DerivedWithD parece anular, y puede llamar al público f ()? Además, cuando cambio la f () de PrivateOverride a public, todo imprime Derived f (), ¡ahora me confunde!