Vars de ma class fille que je veux récup dans la classe mere

Résolu
Grafiteur -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

Je vous explique mon probléme :
j'ai une classe mere abstract A
et des classes fille B et C
mon modèle stock dans une ArrayList<A> des objets que j'instantie B, C

J'ai une méthode commune run() que j'ai besoin de mettre dans A, et mon problème c'est que j'ai besoin d'utiliser 2 variable d'instance appartenant a B et C, du coup je ne sais pas comment faire, quelqu'un peut m'aider ?
Alors je sais que ma demande est pas logique conceptuellement, mais je voulais éviter la redondance d'une methode qui va faire une 50ene de ligne, tout ça à cause d'un caractère et d'un entier...

j'ai cherché un peu, j'ai trouvé une methode :
A fille = modele.getA(var1, var2);
if (fille.equals(B.class)) ceQueJeVeutFaire(((B) fille).getMaVar());
else if (fille.equals(C.class)) ceQueJeVeutFaire(((C) fille).getMaVar());


mais je sais pas si ça fonctionne car le modèle est fait ainsi :
ArrayList<A> liste = new ArrayListe<>();
liste.add(new B());
liste.add(new C());


Mais peut-être avez vous une autre solution ?
peut etre qu'il y a une methode moins borderline

merci pour votre aide !


2 réponses

Grafiteur
 
Du coup, je me dis que que je devrais mettre les 2 variables dans la class mère mais le problème que sa valeur dépent de la classe fille auquelle elle appartient (class mère est abstraite donc non instantiable)

pour info je suis en 1ere année de dut info donc peut etre que c'est la conception de mes classes qui n'est pas adapté, j'espère avoir donné assez de renseignements :)
1
KX Messages postés 19031 Statut Modérateur 3 020
 
Bonjour,

Il faudrait que tu déclares
abstract A getMaVar();
dans ta classe mère.

A a = modele.getA(var1, var2);
ceQueJeVeutFaire(a.getMaVar());
0
Grafiteur
 
Merci :D
je comprends à quoi sert les signatures dans ce type de classe maintenant (je prends un peu d'avance sur le cours)
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Remarque :
fille.equals(B.class)
ne peut pas fonctionner, car à gauche on a un type qui extends A (par exemple B ou C), mais à droite on a type Class<B> donc ça colle pas.

Pour que l'égalité soit correcte on pourrait faire
fille.getClass().equals(B.class)
ou
fille instanceof B
(et il y a encore d'autres manières pour faire)
0