this y super: ligadura dinamica

Iniciado por 4dr14n31t0r, 17 Febrero 2016, 11:11 AM

0 Miembros y 1 Visitante están viendo este tema.

4dr14n31t0r

Tengo las siguientes 3 clases:public class ClaseA {
public String metodo1(){
return "A";
}
public String metodo2(){
return this.metodo1();
}

}
public class ClaseB extends ClaseA {
public String metodo1(){
return "B";
}
public String metodo2(){
return this.metodo1() +""
+super.metodo1();
}

}
public class ClaseC extends ClaseB {
public String metodo1(){
return "C";
}

}
Y aparte también tengo una clase de prueba:public class PruebaClase{
public static void main(String[] args) {
ClaseA objetoA1 = new ClaseC();
System.out.println(objetoA1.metodo2());
ClaseA objetoA2 = new ClaseB();
System.out.println(objetoA2.metodo2());
}

}
Esta clase de prueba produce la siguiente salida:CA
BA
Pero, ¿Porqué?
En un principio, al ejecutarse el metodo2 de la claseC, utiliza el de la claseB porque lo hereda. Desde el metodo2 de la claseB se utilizan el metodo1 de la misma instancia (al ser una instancia de C se refiere al metodo que retorna una "C") y al metodo1 de la clase superior. Y aqui es donde entra la pregunta: ¿Porqué en este caso el metodo1 de la clase superior se refiere al de la claseA y no al superior de la instancia, que al ser una instancia de la claseC deberia referirse a la claseB?