J'ai conçu ce qui suit pour un problème:conception en utilisant la composition et les interfaces en Java
class Animal {
// ...
}
class Guppy extends Animal { ... }
class Pigeon extends Animal { ... }
class TailedAnimal extends Animal {
// ...
}
class Dog extends TailedAnimal { ... }
class Cat extends TailedAnimal { ... }
class HornedAnimal extends Animal {
// ...
}
class Ram extends HornedAnimal { ... }
public static void main(String[] args) {
Animal a = getSomeAnimal();
a.doSomething();
if (a instanceof TailedAnimal) {
// do something
}
if (a instanceof HornedAnimal) {
// do something else
}
}
animaux, HornedAnimal et TailedAnimal sont principalement utilisés comme modèles de données.
Étant donné que Java ne prend pas en charge l'héritage multiple, j'ai de la difficulté à créer Rhinoceros qui est un animal à cornes et à queue. Après avoir demandé autour, quelqu'un a recommandé d'utiliser la composition et les interfaces. Je suis venu avec ce qui suit:
class Animal {
// ...
}
class Guppy extends Animal { ... }
class Pigeon extends Animal { ... }
class Ram extends Animal implements IHorned { ... }
class Cat extends Animal implements ITailed { ... }
class Dog extends Animal implements ITailed {
BasicTail t = new BasicTail();
public Object getTail() {
return t.getTail();
}
public void setTail(Object in) {
t.setTail(in);
}
}
interface ITailed {
public Object getTail();
public void setTail(Object in);
//...
}
class BasicTail implements ITailed {
Object myTail;
public Object getTail() { return myTail; }
public void setTail(Object t) { myTail = t; }
}
interface IHorned {
// getters and setters
}
public static void main(String[] args) {
Animal a = getSomeAnimal();
a.doSomething();
// how do I check if a is horned or tailed?
}
Mon interface a des getters et des setters. y-a-t-il un moyen d'éviter ça? En supposant qu'il n'y a actuellement aucun moyen d'abstraire le comportement de Tails and Horns, et ils sont principalement utilisés comme détenteurs de données. Comment puis-je déterminer si mon animal est corné ou à queue?
3. 'isinstance IHorned' – khachik
Khachik, je crois qu'il est « instanceof IHorned » –
Eh oui, merci pour réponse à 3. –