Bonjour à tous,
Tout est ds le titre. À titre d'exemple, je voudrais implémenter un jeu rudimentaire de combat naval.
Les types de bateaux diffèrent par leur longueur (porte-avion:5, Cuirassé:4, etc.). Je pensais donc créer une classe Boat comprenant les méthodes communes à tous les types (toString, isSunk (coulé), etc.)
Voici le schéma simplifié de la classe Boat, avec juste un constructeur et la méthode toString:
Voici le schéma d'une classe fille BattleShip
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import java.util.*; public class Boat { private int length; private String type = "Boat"; Collection<Cell> boatCells = new ArrayList(); // le constructeur requiert une longueur, les 2 1ers paramètres sont les // coordonnées du début du bateau, EW est l'orientation du bateau sur la // grille Boat (char c, int n, boolean EW, int length) { for (int i=0; i < length; i++) { Cell C = new Cell(); // ... boatCells.add(C); } } public String toString() { String s = new String(type + " "); Iterator<Cell> e = boatCells.iterator(); while(e.hasNext()) { Cell C = e.next(); s += C.c + ":" + C.n + " "; } return s; } }
Si je fais le test suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class BattleShip extends Boat { public int length = 4; String type = "BattleShip"; // le constructeur ne requiert pas de longueur mais appelle // le constructeur de la classe mère avec une longueur fixe BattleShip (char c, int n, boolean EW) { super(c,n,EW, 4); } }
J'obtiens
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class test { public static void main (String[] argv) { BattleShip a1 = new BattleShip('A',0,true); System.out.println(a1); } }
Boat A:0 B:0 C:0 D:0
soit bien l'affichage des 4 cellules, mais le type est celui de la classe mère.
Je ne trouve pas de solution à la situation suivante: comment spécifier des caractères propres aux classes filles (comme ici la longueur et le type) tout en appelant une ou des méthodes implémentées dans leur classe-mère, de manière à ne pas devoir ré-écrire le code à chaque fois au sein des classes filles.
Partager