Java cast to superclass y método de sobrecarga de llamadas
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());
}
}
El programa devolverá 3 y esperaba 0. ¿Por qué el primer elenco en el método f no hace nada y el segundo funciona? ¿Es porque en las clases A y B los métodos cumplidos están sobrecargados y, por lo tanto, se utiliza el enlace estático?