Partager du code entre plusieurs classes-filles
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:
Code:
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;
}
} |
Voici le schéma d'une classe fille BattleShip
Code:
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);
}
} |
Si je fais le test suivant:
Code:
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);
}
} |
J'obtiens
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.