herança de sobrecarga e polimorfismo do método java

Aqui está uma pergunta de prática de teste que me deparei, agradeceria sua ajuda para me fazer entender os conceitos

Deixe Hawk ser uma subclasse de Bird. Suponha que alguma classe tenha dois métodos sobrecarregados void foo (Hawk h) e void foo (Pássaro b). Qual versão seria executada na chamada foo (x) após a declaração Bird x = new Hawk ();

Aqui está o código que eu tenho até agora, alguém poderia me explicar por que o foo (pássaro b) é executado?

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


}

questionAnswers(2)

yourAnswerToTheQuestion