Java перегрузка и правила наследования
Я учился, потому что у меня экзамен, и у меня нет многих проблем с большей частью Java, но я наткнулся на правило, которое не могу объяснить. Вот фрагмент кода:
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));
}
Это возвращает:
1 3 1 3
Пока я бы ожидал его возвращения
1 3 1 4
Почему тип a2 определяет, какой метод вызывается в AX?
Я читал о перегрузке правил и наследования, но это кажется достаточно неясным, так что я не смог найти точное правило. Любая помощь будет принята с благодарностью.