Java приведение к суперклассу и вызов метода перегрузки
abstract class A {
int met(A a) {
return 0;
}
int met(B b) {
return 1;
}
int met(C c) {
return 2;
}
}
class B extends A {
int met(A a) {
return 3;
}
int met(B b) {
return 4;
}
int met(C c) {
return 5;
}
}
class C extends B {
int f() {
return ((A)this).met((A)this);
}
}
public class teste {
public static void main(String args[]) {
C x = new C();
System.out.println(x.f());
}
}
Программа вернет 3, а я ожидал 0. Почему первое приведение в методе f ничего не делает, а второе работает? Это потому, что в классах A и B методы met перегружены и, следовательно, используется статическая привязка?