Java-Überlastungs- und Vererbungsregeln

Ich habe studiert, weil ich eine Prüfung habe und ich habe nicht viele Probleme mit den meisten Java, aber ich bin auf eine Regel gestoßen, die ich nicht erklären kann. Hier ist ein Codefragment:

public class A {

    public int method(Object o) {
        return 1;
    }

    public int method(A a) {
        return 2;
    }
}

public class AX extends A {

    public int method(A a) {
        return 3;
    }

    public int method(AX ax) {
        return 4;
    }
}

public static void main(String[] args) {
    Object o = new A();
    A a1 = new A();
    A a2 = new AX();
    AX ax = new AX();

    System.out.println(a1.method(o));
    System.out.println(a2.method(a1));
    System.out.println(a2.method(o));
    System.out.println(a2.method(ax));
}

Dies ergibt:

1 3 1 3

Ich würde zwar erwarten, dass es zurückkommt:

1 3 1 4

Warum bestimmt der Typ von a2, welche Methode in AX aufgerufen wird?

Ich habe über das Überladen von Regeln und Vererbung gelesen, aber das scheint dunkel genug zu sein, dass ich die genaue Regel nicht finden konnte. Jede Hilfe wäre sehr dankbar.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage