deterred
Messages postés35Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention27 août 2007
-
1 janv. 2007 à 01:44
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 2009
-
1 janv. 2007 à 12:40
Bonjour,
Mon probleme va sans doute paraitre tres simple, peut etre absurde à certains, mais je débute en Java et seul ce n'est pas simple.
Voici ma question.
Comment dialoguer entre les classes d'un projet ? Dans le sens Appelante, Appelée c'est facile, mais dans l'autre ?
Un exemple pour m'expliquer mieux :
public class parent {
public parent () {
fille mafille = new fille();
}
public void fonctionA() {
...
}
}
public class fille {
public fille() {
...
}
}
Comment, depuis la classe fille, je peux appeler la fonctionA ? Ceci sans creer de nouvelle instance de parent.
J'ai essayé de faire un truc du genre
public class fille extends parent {
public fille() {
super.fonctionA();
}
}
mais, super représente une nouvelle occurence de parent
bon vous voyez le souci ? j'tourne en rond ...
Si ya une âme charitable pour m'expliquer ce que je comprend pas, et me donner la marche à suivre, j'en serais très content :)
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 1 janv. 2007 à 05:12
super représente juste un appel vers la classe mere.
super.fonctionA() est un appel a la méthode fonctionA de la classe mére.
lorsque tu instancie la classe fille tu crée un objet de type fille, mais également (de facon transparente un objet de classe parent). le mot clé super permet l'appel d'une méthode de la classe mere instancier (automatiquement) lors de la création de l'objet fille.
je ne sais pas si j'ai été clair...
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
deterred
Messages postés35Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention27 août 2007 1 janv. 2007 à 10:57
Oui merci c'est très clair.
Donc, en fait comment empecher l'instanciation de ce parent ? ou de faire appel au parent qui a créé la fille ?
Par exemple un code comme celui là ne fonctionne pas :
public class parent {
public int toto;
public parent () {
toto = 0;
fille mafille = new fille();
toto = 1;
mafille.afficheToto();
}
}
public class fille extends parent {
public fille() {}
public void afficheToto() {System.out.println(super.toto);}
}
Comment je peux afficher 1 ? en plus là il y a une erreur de boucle puisqu'il créé indefiniment des parents et des filles !
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 1 janv. 2007 à 11:21
en fait tu ne peux pas empéché l'instanciation automatique de la classe mére puis que la classe fille est une extension de cette derniere.
pour ton exemple toto est déclaré public donc accessible par toute les classes ou parent est instancier. or quand tu instancie fille, parent n'est pas réellement instancier... (jsui peut etre pas tres clair)
bref pour que les variables de ta classe mere soit accessible dans les classes dérivé il faut utilisé le mot clé protected (protected int toto). ensuite pour pouvoir accédé a ta variable toto dans la classe fille, tu fais simplement toto = ....
tu n'as pas besoin d'utiliser le super. car une fille c en gros la meme chose qu'une classe mere mais complété.
par exemple
class A
{
int toto;
...
public void aa()
{}
}
class B extends A
{
int c;
...
public void bb()
{}
}
est équivalent a:
class B
{
int toto;
int c;
...
public void aa()
{}
public void bb()
{}
}
le mot clé super sert en fait à forcé l'appel d'une fonction dans la classe mere. par exemple avec l'exemple precedent:
class A
{
int toto;
...
public void aa()
{}
}
class B extends A
{
int c;
...
public void aa()
{}
}
la fonction aa() de la classe fille est redéfinit et rend impossible l'appelle a la méthode aa() de la classe mere. or si tu fais:
class B extends A
{
int c;
...
public void aa()
{ super.aa(); instructions; }
}
alors quand dans la classe fille tu apels la méthode aa(), cette derniere fait appel a la méthode aa() de la classe mére et continue en effectué les instructions qui suivent...
est-ce que c'est plus clair maintenant?
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 1 janv. 2007 à 12:40
non. tu fais un héritage et toutes les propriétés et méthode de ta classe mére seront dupliqué dans ta classe fille
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."