cs_limalima
Messages postés124Date d'inscriptiondimanche 31 août 2008StatutMembreDernière intervention16 décembre 2010
-
27 nov. 2008 à 10:58
dvoraky
Messages postés744Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 9 mai 2010
-
27 nov. 2008 à 11:29
Bonjour à tous , j'ai un code dont je ne comprends pas le résultat:
deux classes: Test_C et D (avec D extends Test_C)
chaque classe à une méthode f():
C.f() affiche seuleument la valeur de i
D.f() affiche la valeur de i et celle de j
dans la classe Run2 on :
Test_C c= new
D();
c.f();
regardons ce que moi j'ai compris:
on fait appel au constructeur de la classe fille, donc le compilateur appele d'abord
le constructeur de la classe mère, ce qui provoque l'affichage suivant:
i =0
ensuite dans cette classe Run2 on a appelé la méthode f() de la classe D(car l'objet c est une instance de D)
d'ou l'affichage :i= 1,j=1
mais quand je compile ça me donne cette affichage:
i= 1,j= 0
i= 1,j= 1
pourquoi ça affiche la valeur de j=0(alors c'est la méthode C.f() n'affiche pas le "j"?
dvoraky
Messages postés744Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 9 mai 20108 27 nov. 2008 à 11:18
Salut,
Si tu regardes bien, tu as l'instruction "i=1" dans ton constructeur de ta classe Test_C qui est avant l'appel de ta méthode f().
Donc i prend la valeur 1 avant que tu demandes de l'afficher, il est donc normal que tu n'aies pas de i=0 à l'affichage.
Ensuite, il ne faut pas oublier que tu as demandé un objet D et non Test_C.
Donc quand tu fais appel à f() dans ta classe Test_C, c'est la méthode f de D qui est appelé, donc tu as logiquement l'affichage de i=1,j=0
<hr width="100%" size="2" />
C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
dvoraky
Messages postés744Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 9 mai 20108 27 nov. 2008 à 11:29
Je te remercie d'avoir valider ma réponse.
Je t'apporte des infos supplémentaires :
Quand tu fais un extends, un appel au constructeur père est automatiquement appelé, en fait, ça t'évite d'écrire en premiere ligne de ton constructeur fils la ligne :
super();
Cette ligne est automatiquement faite.
Cependant, dans ta classe père, tu pourrais faire plusieurs constructeurs, par exemple, pour ton cas, tu pourrais faire un constructeur qui prendrait en paramètre un entier et qui l'affecterait à i.
Ensuite, dans ta classe fille pour l'appeller tu ferais simplement :
super(8);
Et là, tu passerais dans le constructeur avec paramètre.
Voilà, je pense qu'il est important de savoir ceci, car l'héritage est très intéressant et tu en utiliseras beaucoup dans tes programmes.
A+
<hr width="100%" size="2" />
C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...