Правила перегрузки и наследования Java

Я учился, потому что у меня экзамен, и у меня не так много проблем с большей частью Java, но я наткнулся на правило, которое могу' t объяснить.Вот фрагмент кода:

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?

Я читал о правилах перегрузки и наследовании, но это кажется достаточно неясным, поэтому я не смог найти точное правило. Любая помощь будет принята с благодарностью.

31
задан Lugaid 19 June 2012 в 22:54
поделиться