Verwirrende "überschreiben eine private Methode"

Ich habe zwei Fragen zu diesem Code

public class Override {
    private void f() {
        System.out.println("private f()");
    }
    public static void main(String[] args) {
        Override po = new Derived();
        po.f();
    }
}

class Derived extends Override {
    public void f() {
        System.out.println("public f()");
    }
} 

/*
* Output: private f()
*/// :~

1) Wie ist die Funktion f in der Referenz von Override po sichtbar?

2) Warum wird "private f ()" ausgegeben

Antworten auf die Frage(3)

Ihre Antwort auf die Frage