¿Por qué llama la implementación del método del padre un objeto que ha sido promovido en Java?
Me encontré con un problema mientras jugaba con la herencia de clases en Java, donde la subclase C tiene un método fun() como su padre A, pero con una firma diferente. Sin embargo, no entiendo por qué se llama al método de la clase padre cuando se invoca fun() en el objeto x. Entiendo que debido a que la firma es diferente, esto no es exactamente una anulación de método, pero aun así no entiendo por qué se invoca el método fun() de A aquí.
Clase A
class A{
public void fun(double d){
System.out.println("A");
}
}
Clase C
public class C extends A{
public static void main(String[] args){
A x = new C();
x.fun(6); //imprime "A"
}
public void fun(int i){
System.out.println("C");
}
}
davy.ai
La razón por la cual se llama al método
fun()
de la clase A cuando se invocafun()
en el objetox
es debido a la despachación dinámica de métodos.La despachación dinámica de métodos es un mecanismo por el cual una llamada a un método sobreescrito se resuelve en tiempo de ejecución en lugar de en tiempo de compilación. En este caso, como la firma del método
fun()
en la clase C es diferente a la de la clase A, el compilador no puede determinar qué método llamar en tiempo de compilación. Por lo tanto, la llamada al método se resuelve en tiempo de ejecución y como el objetox
es de tipo A, se llama al métodofun()
de la clase A.