entworfen ich folgende für ein Problem:Entwerfen Sie mit Zusammensetzung und Schnittstellen in 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
}
}
Tier, HornedAnimal und TailedAnimal werden hauptsächlich als Datenmodelle verwendet.
Da Java keine Mehrfachvererbung unterstützt, habe ich Probleme beim Erstellen von Rhinoceros, das ein Horned and Tailed-Tier ist. Nachdem Sie sich erkundigt hatten, empfahl jemand die Verwendung von Komposition und Interfaces. Ich habe folgendes gefunden:
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?
}
Meine Schnittstelle hat Getter und Setter. Gibt es eine Möglichkeit, dies zu vermeiden? Angenommen, es gibt derzeit keine Möglichkeit, das Verhalten von Tails und Horns zu abstrahieren, und sie werden hauptsächlich als Datenspeicher verwendet. Wie kann ich feststellen, ob mein Tier Gehörnte oder Tailed ist?
3. 'isinstance IHorned' – khachik
Khachik, ich glaube, es ist‚Instanceof IHorned‘ –
Yup, vielen Dank für Antwort auf 3. –