Java-Methode überladen Vererbung und Polymorphismus

Hier ist eine Frage zur Testpraxis, auf die ich gestoßen bin. Ich würde mich über Ihre Hilfe freuen, damit ich die Konzepte verstehen kann

Lass Hawk eine Unterklasse von Bird sein. Angenommen, eine Klasse hat zwei überladene Methoden: void foo (Hawk h) und void foo (Bird b). Welche Version würde im Call foo (x) nach der Deklaration ausgeführt werden? Bird x = new Hawk ();

Hier ist der Code, den ich bisher habe. Kann mir jemand erklären, warum foo (Vogel b) ausgeführt wird?

public class MPractice {
    public static void main(String args[]) {
        Bird x = new Hawk();
        Third y = new Third();
        y.foo(x);
    }

}



 public class Third {
    void foo(Hawk h) {
        System.out.println("Hawk");
    }
    void foo(Bird b) {
        System.out.println("Bird");
    }


}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage