Strucht_dnc:
Estoy confundido acerca de cómo son los métodos y constructores llamadas en tiempo de ejecución, ya que el constructor derivado se imprime 3 veces y la altura se imprime 0
He tratado de imprimir algunos mensajes dentro de los métodos y constructores como para saber qué es exactamente lo que está sucediendo
public class Derived extends Base{
public static void main(String args[]){
System.out.println("Hello World");
Derived d = new Derived();
}
protected Derived(){
System.out.println("Inside Derived Const");
showAll();
}
protected void showAll(){
System.out.println("Inside Derived showAll");
System.out.println(getClass().getName()+" : "+height);
}
double height = 106.0;
}
class Base{
protected Base(){
System.out.println("Inside Base Const");
showAll();
}
protected void showAll(){
System.out.println("Inside Base showAll");
System.out.println(getClass().getName()+" : "+height);
}
double height = 196.0;
}
Yo esperaba que la salida sea
Hello world
Derived : 106
Base : 196
en lugar de eso estoy haciendo
Hello World
Inside Base Const
Inside Derived showAll
Derived : 0.0
Inside Derived Const
Inside Derived showAll
Derived : 106.0
Jesús te ama;
Es porque se deriva el Derived
tipo de Base
clase y que cubrían el variable y también sustituyendo los métodos.
Estás llamando al constructor de la clase base cada vez que estés crear instancias de la clase derivada con:
Derived d = new Derived();
Aquí lo que sucede cuando se está llamando el código anterior:
- Constructor de la clase base
Base()
se llama, - a continuación,
"Inside Base Const"
se imprime, - método
showAll()
no se llama porque está siendo anulación. MétodoshowAll()
dentro de laDerived
clase se llama en su lugar, "Inside Base showAll"
está impreso,"Derived : 106.0"
se imprime porquedouble height = 196.0;
la clase dentro de la base se está ensombrecido pordouble height = 106.0;
el interior de laDerived
clase.