"Überschreiben" privater Methoden mit Upcasting-Aufruf in 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();
}
}
Wenn DerivedWithOutD die Methode d () nicht überschreibt, ruft er die Funktion f () von PrivateOverride auf, da die Methode f () von PrivateOverride nicht überschrieben werden kann von PrivateOverride sollte zu DerivedWithOutD gehören, warum ruft d () das private f () auf? Und warum scheint die DerivedWithD-Klasse den Override zu machen, und kann die public f () aufrufen? Auch wenn ich das f () von PrivateOverride in public ändere, gibt alles Derived f () aus. Das verwirrt mich jetzt!