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 Derived
classe de Base
classe 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éthodeshowAll()
dans laDerived
classe 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 laDerived
classe.