Pourquoi le programme imprime la valeur de hauteur 0 au lieu de celui que je ensemble?

Strucht_dnc:

Je suis confus sur la façon dont sont les méthodes et les constructeurs appelés lors de l'exécution, puisque le constructeur dérivé est imprimé 3 fois et la hauteur est imprimée 0

J'ai essayé d'imprimer des messages à l'intérieur des méthodes et des constructeurs pour savoir ce qui se passe exactement

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;
}

Je pensais que la sortie soit

Hello world
Derived : 106
Base : 196

au lieu que je reçois

Hello World
Inside Base Const
Inside Derived showAll
Derived : 0.0
Inside Derived Const
Inside Derived showAll
Derived : 106.0
Jésus vous aime;

Il est parce que vous tiriez la Derivedclasse de Baseclasse et shadowing la variable et en remplaçant également les méthodes.

Vous appelez le constructeur de la classe de base à chaque fois que vous instancier la classe dérivée avec:

Derived d = new Derived();

Voici ce qui se passe lorsque vous appelez le code ci-dessus:

  • Constructeur de la classe de base Base()est appelée,
  • puis "Inside Base Const"est imprimé,
  • méthode showAll()n'est pas appelé parce qu'il est d' être prioritaire. Méthode showAll()dans la Derivedclasse est appelée à la place,
  • "Inside Base showAll" est imprimé,
  • "Derived : 106.0"est imprimé , car à l' double height = 196.0;intérieur de la classe de base est assombrie par l' double height = 106.0;intérieur de la Derivedclasse.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=229199&siteId=1
conseillé
Classement