¿Por qué el programa imprime el valor de la altura 0 en lugar del conjunto que yo?

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 Derivedtipo de Baseclase 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étodo showAll()dentro de la Derivedclase se llama en su lugar,
  • "Inside Base showAll" está impreso,
  • "Derived : 106.0"se imprime porque double height = 196.0;la clase dentro de la base se está ensombrecido por double height = 106.0;el interior de la Derivedclase.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=229203&siteId=1
Recomendado
Clasificación