Мне интересно, почему Java вызывает метод подкласса с помощью метода mA (), а не с помощью метода im (b).Я действительно не вижу никакой причины, почему он это делает.Как Java решает, какой метод вызывать?
public class C {
public static void main(String[] args) {
A a = new B();
B b = new B();
a.mA(); // prints BmA
a.im(b); // prints Aim -- Why not Bim?
b.im(a); // prints Aim -- Why not Bim?
}
}
public class A {
public void mA() {System.out.println("AmA");};
public void im(A a) {System.out.println("Aim");};
}
public class B extends A {
public void mA() {System.out.println("BmA");};
public void im(B b) {System.out.println("Bim");};
}
Я бы ожидал, что im (b) будет вести себя как mA ().