JAVA, probleme de dialogue entre sous-classes
Radikal_loulou
-
UaLShark Messages postés 193 Statut Membre -
UaLShark Messages postés 193 Statut Membre -
Bonjour, j'ai un probleme de dialogue entre 2 sous-classes d'une même superclasse, ci joint le code :
class SUPER {
public sous1 instance1;
public sous2 instance2;
}
class sous1 extends SUPER {
public int a = 44;
}
class sous2 extends SUPER {
public void chope() {
System.out.println(super.instance1.a); // le problème est surement là
}
}
public class NewMain {
public static void main(String[] args) {
SUPER superinstance = new SUPER();
superinstance.instance1 = new sous1();
superinstance.instance2 = new sous2();
System.out.println(superinstance.instance1.a); // ceci fonctionne
superinstance.instance2.chope(); // mais pas cela
}
}
....................................................................
Peut-être n'est-ce pas possible de dialoguer entre 2 sous-classes d'une même superclasse ?
Merci de votre aide...
Et pendant que j'y suis... je n'arrive pas à initialiser les instances des sous-classes dans le constructeur de la super classe, cela provoque une erreur en boucle... Est-ce normal ??
MERCI beaucoup.
class SUPER {
public sous1 instance1;
public sous2 instance2;
}
class sous1 extends SUPER {
public int a = 44;
}
class sous2 extends SUPER {
public void chope() {
System.out.println(super.instance1.a); // le problème est surement là
}
}
public class NewMain {
public static void main(String[] args) {
SUPER superinstance = new SUPER();
superinstance.instance1 = new sous1();
superinstance.instance2 = new sous2();
System.out.println(superinstance.instance1.a); // ceci fonctionne
superinstance.instance2.chope(); // mais pas cela
}
}
....................................................................
Peut-être n'est-ce pas possible de dialoguer entre 2 sous-classes d'une même superclasse ?
Merci de votre aide...
Et pendant que j'y suis... je n'arrive pas à initialiser les instances des sous-classes dans le constructeur de la super classe, cela provoque une erreur en boucle... Est-ce normal ??
MERCI beaucoup.
A voir également:
- JAVA, probleme de dialogue entre sous-classes
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Dialogue boost - Accueil - Guide streaming
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
5 réponses
Wé c'est la meilleure solution, pas besoin de faire autant de variables autant de classes !
tu peux utiliser un Vector statique et chaque classe fille lorsqu'elle se crée tu lui affecte un numéro qui correspond au numéro de l'elément dans le vector ;-)
c-a-d puisque c'est les meme attributs tu crée une classe Attributs,
chaque fois tu crée une classe fille tu ajoutes ses attributs (une instance d'Attributs) au vecteur
tu lui affecte un numéro, qui lui permetteras de pointer sur l'élément correct du vecteur.
pour l'attribution du numéro tu peux utiliser une varible statique qui s'incrémente chaque fois ou tu crées une classe
Allez Bonne Continuation
tu peux utiliser un Vector statique et chaque classe fille lorsqu'elle se crée tu lui affecte un numéro qui correspond au numéro de l'elément dans le vector ;-)
c-a-d puisque c'est les meme attributs tu crée une classe Attributs,
chaque fois tu crée une classe fille tu ajoutes ses attributs (une instance d'Attributs) au vecteur
tu lui affecte un numéro, qui lui permetteras de pointer sur l'élément correct du vecteur.
pour l'attribution du numéro tu peux utiliser une varible statique qui s'incrémente chaque fois ou tu crées une classe
Allez Bonne Continuation
instance2 ne fait pas le lien avec super pour trouver instance1;
parce qu'on fait :
public void chope() reference à la classe mere de l'instance crée à partir de sous2 ;
mais superinstance2 n'est pas la mere de cette instance c'est un owner (autrement dit l'instance dont tu parles n'est qu'un attribut de la classe superinstance pas une classe file!)
Tu dois revoir la conception des classes;
Mais en général deux classes filles peuvent dialoguer entre elles via des attributs statiques de la classe mère.
@+
parce qu'on fait :
public void chope() reference à la classe mere de l'instance crée à partir de sous2 ;
mais superinstance2 n'est pas la mere de cette instance c'est un owner (autrement dit l'instance dont tu parles n'est qu'un attribut de la classe superinstance pas une classe file!)
Tu dois revoir la conception des classes;
Mais en général deux classes filles peuvent dialoguer entre elles via des attributs statiques de la classe mère.
@+
nouveau code :
class SUPER {
public sous1 instance1;
public sous2 instance2;
}
class sous1 extends SUPER {
public int a = 44;
}
class sous2 extends SUPER {
public void chope() {
System.out.println(super.instance1.a); // le problème est surement là
}
}
public class NewMain {
public static void main(String[] args) {
SUPER superinstance = new SUPER();
superinstance.instance1 = new sous1();
//ceci sous les conseils de UaLShark :
sous1 inst1 = new sous1();
inst1.instance2 = new sous2();
System.out.println(inst1.instance1.a); // ceci ne fonctionne pas
inst1.instance2.chope(); // ça non plus
}
}
merci de ta réponse même si ça ne fonctionne toujours pas, mais je saisis mal comment inst1.instance1 ou inst1.instance2 peut exister ( car il n'ont pas la même superinstance je me trompe ? )
quand au probleme de la méthode chope, je crois qu'il est du à son code propre, et pas à la façon dont on l'appelle ( netbean me donne 2 erreurs nullpointerexceptions, une sur la déclaration, une sur l'appel )
Alors y-a-t-il une issue ? sinon ou donc que ça coince-t-il ?
class SUPER {
public sous1 instance1;
public sous2 instance2;
}
class sous1 extends SUPER {
public int a = 44;
}
class sous2 extends SUPER {
public void chope() {
System.out.println(super.instance1.a); // le problème est surement là
}
}
public class NewMain {
public static void main(String[] args) {
SUPER superinstance = new SUPER();
superinstance.instance1 = new sous1();
//ceci sous les conseils de UaLShark :
sous1 inst1 = new sous1();
inst1.instance2 = new sous2();
System.out.println(inst1.instance1.a); // ceci ne fonctionne pas
inst1.instance2.chope(); // ça non plus
}
}
merci de ta réponse même si ça ne fonctionne toujours pas, mais je saisis mal comment inst1.instance1 ou inst1.instance2 peut exister ( car il n'ont pas la même superinstance je me trompe ? )
quand au probleme de la méthode chope, je crois qu'il est du à son code propre, et pas à la façon dont on l'appelle ( netbean me donne 2 erreurs nullpointerexceptions, une sur la déclaration, une sur l'appel )
Alors y-a-t-il une issue ? sinon ou donc que ça coince-t-il ?
renouveau code :
class SUPER {
public static int a;
}
class sous1 extends SUPER {
public sous1() {
super.a = 0;
}
public void execute(){
System.out.println("rentrer :");
super.a=Lire.i();
}
}
class sous2 extends SUPER {
public void foisdeux() {
System.out.println(super.a*2);
}
}
public class NewMain {
public static void main(String[] args) {
sous1 instance1 = new sous1();
sous2 instance2 = new sous2();
instance1.execute();
instance2.foisdeux();
}
}
j'ai fini par trouver.
et c'est magnifique ! un attribut statique dans la super classe et hop! pas besoin de mettre mes sous classes en attribut, ce qui d'ailleurs ne fonctionnait pas pour les faire dialoguer.
J'avais besoin de comprendre cela car je dois préparer une interface graphique avec plusieurs fenêtres, et j'utiliserais ce moyen pour rendre une variable accessible par toutes mes " truc extends JFrame ".
merci UaLShark :-D
class SUPER {
public static int a;
}
class sous1 extends SUPER {
public sous1() {
super.a = 0;
}
public void execute(){
System.out.println("rentrer :");
super.a=Lire.i();
}
}
class sous2 extends SUPER {
public void foisdeux() {
System.out.println(super.a*2);
}
}
public class NewMain {
public static void main(String[] args) {
sous1 instance1 = new sous1();
sous2 instance2 = new sous2();
instance1.execute();
instance2.foisdeux();
}
}
j'ai fini par trouver.
et c'est magnifique ! un attribut statique dans la super classe et hop! pas besoin de mettre mes sous classes en attribut, ce qui d'ailleurs ne fonctionnait pas pour les faire dialoguer.
J'avais besoin de comprendre cela car je dois préparer une interface graphique avec plusieurs fenêtres, et j'utiliserais ce moyen pour rendre une variable accessible par toutes mes " truc extends JFrame ".
merci UaLShark :-D
wé je savais d'avance que c'était pas très propre c'est pour ça que j'ai modifier la réponse.
- comment inst1.instance1 ou inst1.instance2 peut exister ( car il n'ont pas la même superinstance je me trompe ? ) :
--> En fait c'est le principe de base de l'héritage :
inst1 est de type instance1 qui hérite de SUPER, donc tous les attributs public et protected de de SUPER se propagent vers inst1 (et toutes les classes filles de SUPER)
c'est pour ça si tu écris inst1.instance2 c'est correct, en fait tu accèdes à l'attribut "instance2" de la classe mère de inst1.
Si j'ai bien compris que tu veux que deux instances de classes dérivées aient la même instance de classe mère
ceci n'est pas faisable.
-sinon ou donc que ça coince-t-il ?
ça coince parce que les attributs et les méthodes hérités de la classe mère ne sont pas séparables des attributs de la classe fille, en un objet solidaire de type classe mère.( bien qu'on peut les référencer via super.)
par suite tu peux pas faire inst2.super = inst1.super (NON)
c ça le pb :-)
mets moi au courant si tu veux faire autrement
- comment inst1.instance1 ou inst1.instance2 peut exister ( car il n'ont pas la même superinstance je me trompe ? ) :
--> En fait c'est le principe de base de l'héritage :
inst1 est de type instance1 qui hérite de SUPER, donc tous les attributs public et protected de de SUPER se propagent vers inst1 (et toutes les classes filles de SUPER)
c'est pour ça si tu écris inst1.instance2 c'est correct, en fait tu accèdes à l'attribut "instance2" de la classe mère de inst1.
Si j'ai bien compris que tu veux que deux instances de classes dérivées aient la même instance de classe mère
ceci n'est pas faisable.
-sinon ou donc que ça coince-t-il ?
ça coince parce que les attributs et les méthodes hérités de la classe mère ne sont pas séparables des attributs de la classe fille, en un objet solidaire de type classe mère.( bien qu'on peut les référencer via super.)
par suite tu peux pas faire inst2.super = inst1.super (NON)
c ça le pb :-)
mets moi au courant si tu veux faire autrement
et ben aparamment je vais faire comme ce que je viens d'écrire. les variables qui auront besoin de passer d'une sous classe à l'autre ( d'une JFrame à l'autre ) seront doublées en tant qu' attributs statics d'une super classe, et ainsi accessibles de partout.
voila. si tu as une meilleure solution...fais le moi savoir
merci
voila. si tu as une meilleure solution...fais le moi savoir
merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re
je préfère la classe Vector c'est très simple et très clair
en tout cas j te file les principale métodes que tu pourrais utiliser
import java.util.Vector;
addElement(Object ) // ajoute un élément à la fin
setElementAt(int position,Object)
elementAt(int position) // retourne l'élément à position
size() // retourne la taille actuelle du vecteur
juste il faut un casting lors de l'appel de Vector.elementAt(i);
exp :
sous1 obj1 = (sous1) v.elementAt(2);
j'éspère que ça sera util pour toi
bonne continuation
je préfère la classe Vector c'est très simple et très clair
en tout cas j te file les principale métodes que tu pourrais utiliser
import java.util.Vector;
addElement(Object ) // ajoute un élément à la fin
setElementAt(int position,Object)
elementAt(int position) // retourne l'élément à position
size() // retourne la taille actuelle du vecteur
juste il faut un casting lors de l'appel de Vector.elementAt(i);
exp :
sous1 obj1 = (sous1) v.elementAt(2);
j'éspère que ça sera util pour toi
bonne continuation
Et remplir cette arraylist avec les instances de mes sous classe dans le MAIN. ça marcherait ?
class SUPER {
public static Object[] instances;
public SUPER() {
instances = new Object[3];
}
}
class sous1 extends SUPER {
public char a = 'a';
public char b = 'b';
public void chope1() {
sous2 instance2 = (sous2) super.instances[2];
System.out.println(instance2.c + " " + instance2.d);
}
}
class sous2 extends SUPER {
public char c = 'c';
public char d = 'd';
public void chope2() {
sous1 instance1 = (sous1) super.instances[1];
System.out.println(instance1.a + " " + instance1.b);
}
}
public class NewMain {
public static void main(String[] args) {
sous1 instance1 = new sous1();
sous2 instance2 = new sous2();
instance1.instances[1] = instance1;
instance2.instances[2] = instance2;
System.out.println("depuis la sousclasse contenant a b");
instance1.chope1();
System.out.println("depuis la sous classe contenant c d");
instance2.chope2();
}
}
c'est super pratique, j'accède au paramètres de toutes mes sous-classes depuis n'importe laquelle, et en +, par le chemin habituel ( nom_de_l'instance.nom_de_l'attribut ) merci le transtypage, je ne connaissais pas avant et ça m'aurait bien servi... -_-°.
J'ai pris un tableau normal car l'arraylist me posait probleme, je voulais stocker mes instances à l'index de leur numéro ( instance1 en index 1) pour rendre le programme + clair.
Je pensais que l'arraylist rajoutait le nombre de places pour que les index spécifiés dans les "add" existent :
nom_arraylist.add(44,object_qcq );
et paf, l'arraylist fait au moins 45 de long, mais apparemment non.