Bonjour à tous !
Je rencontre un problème lié à l'héritage dans un jeu que je programme. Je m'explique, j'ai deux classes : Table et Joueur. La classe Table utilise la classe Joueur, et la classe Joueur utilise la classe table.
J'aimerais maintenant construire 2 classes, STable et SJoueur, qui héritent respectivement de Table et Joueur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Table { private Joueur joueur; public Joueur getJoueur() {return joueur;} ... } class Joueur { private Table table; public Table getTable() {return table;} ... }
Le problème vient du fait que dans les classes mères, les objets sont de type Table et Joueur. Dans ces classes mères, j'ai des méthodes qui utilisent les variables de classes dans des méthodes. Comment faire pour pouvoir hériter de ces méthodes dans les classes filles et faire en sorte qu'elles utilisent des variables de type STable/SJoueur ? Il est impossible de changer le type des variables, mais n'est-il pas possible de transformer un Joueur en SJoueur pour pouvoir utiliser la même méthode dans Table et STable ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class STable extends Table { public SJoueur getSJoueur() {return joueur;} ... } class SJoueur extends Joueur { public STable getSTable() {return table;} ... }
Solutions envisagées :
J'ai d'abord envisagé de garder les variable de STable en tant que Joueur (et vise-versa), et de les caster quand ce sera nécessaire. Est-ce que cela sera toujours possible ?
J'ai aussi envisagé d'utiliser des generics, mais alors je me retrouve avec ce genre de problème :
Bref, le fait que chaque classe est paramétrée par un type qui étends l'autre, ça fait une boucle infinie... J'ai alors pensé déclarer ma classe comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class Table<J extends Joueur<T extends Table<J extends Joueur<T extends Table<...>>>>> { ... }
Mais cela crée d'autre problème pour des méthode qui utilisent les types generics (je peux détailler si besoin...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class Table<J extends Joueur<?>> { ... }
Bref, comment puis-je faire 2 classes filles qui héritent de deux classes qui s'utilisent mutuellement ?
Merci à tous de votre aide !
Partager