"Ü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!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage