Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : constructeur(code non compris)! [ Divers / Débutant(e) ] (limalima)

jeudi 27 novembre 2008 à 10:58:14 | constructeur(code non compris)!

limalima

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"?


voici mon code:

class Test_C {

private

inti=0;

public Test_C() {i=1;f();

}

public

void f(){

System.

out.print("i= "+i);

}

}//fin class Test_C

class

D extends Test_C

{

privateintj=0;

public D(){

j=1;

}

publicvoid f(){

super.f();

System.

out.println(",j= "+j);

}

}//fin classe D

class

Run2 {

publicstaticvoid main(String[] args) {

Test_C c=

new D();

c.f();

}

}///fin classe Run2

Merci pour votre aide.


jeudi 27 novembre 2008 à 11:18:22 | Re : constructeur(code non compris)!

dvoraky

Réponse acceptée !

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


 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...


jeudi 27 novembre 2008 à 11:29:52 | Re : constructeur(code non compris)!

dvoraky

Réponse acceptée !
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+


 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...



Cette discussion est classé dans : affiche, code, test, classe, constructeur


Répondre à ce message

Sujets en rapport avec ce message

Classe abstraite/sous classe: prb de constructeur [ par Sebastien_teisseire ] J'ai donc la classe abstraite suivante: public abstract class AbstractTest extends JFrame{ protected JPanel pane = new JPanel(); public Abst Question java + C [ par nounouX ] Voila j'aimerai apprendre a faire interagir le langage C et Java, pour le moment j'ai fait un tout petit programme C qui boucle 4 fois, et a chaque bo gérer les événemets [ par laigle76 ] Bonjour,je dévellope depuis à peu pres 1 an an java dans le cadre de mes études et nos profs ne nous ont pas appris comment séparer le code de l'inter Accéder à servlet à partir de code "non j2ee" [ par minosis ] Bonjour, j'ai créé un fichier de conf xml pour une appli qui tourne sous tomcat. Je souhaiterais accéder à l'adresse serveur de ce fichier à partir d' gestion d'exception [ par anneli ] bonjour,je fais un programme ou je recupere le contenu de balises XML et je les testent pour savoir si elles correspondent a des classes existantes da euh ... méthodes/attributs de 2 classes [ par HFanny ] Bonjour à tous,j'ai une question bête (car je sais que j'ai déjà fait mais je ne me souviens plus comment) :J'ai 2 classes A et B, dans A je crée une Raccourci clavier [ par p0236 ] J'ai fait une classe qui derive de KeyListener class EcouteurRaccourciimplements KeyListenerJ'ai lu quelque part qu'il fallait appliq Implémenter ListIterator [ par Hades5k ] Bonjour groupe!Quelqu'un pourrait me donner quelques trucs pour implémenter l'interface ListIterator dans ma classe?Les méthodes sont toutes là... mai Problème avec la classe Double [ par Lecoco_29 ] Bonjour à tous,J'ai un problème et je ne comprend pas pourquoi java réagit comme ça.Je souhaite créer un objet Double avec comme valeur 1/3. Quand je Execution d'une classe précedemment généré [ par auvrayju ] Bonjour,Je suis actuellement sur un projet:Sur ce projet je génère automatiquement du code, je génère le FichierMain.javaJ'arrive à le compiler direct


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.