наследование и полиморфизм перегрузки Java-метода

Вот контрольный вопрос, с которым я сталкивался.

Пусть Хоук будет подклассом Bird. Предположим, у некоторого класса есть два перегруженных метода: void foo (Hawk h) и void foo (Bird b). Какая версия будет выполнена в вызове foo (x) после объявления Bird x = new Hawk ();

Вот код, который у меня есть, может кто-нибудь объяснить мне, почему выполняется foo (птица b)?

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");
    }


}

Ответы на вопрос(2)

Ваш ответ на вопрос