【发布时间】:2011-05-17 06:49:41
【问题描述】:
我为一个问题设计了以下内容:
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
}
}
Animal、HornedAnimal 和 TailedAnimal 主要用作数据模型。
由于 Java 不支持多重继承,我很难创建犀牛,它是一种有角和有尾的动物。四处打听后,有人建议使用组合和接口。我想出了以下几点:
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?
}
我的界面有 getter 和 setter。有没有办法避免这种情况?假设目前没有办法抽象 Tails 和 Horns 的行为,它们主要用作数据持有者。如何确定我的动物是有角的还是有尾的?
【问题讨论】:
-
khachik,我相信它是 'instanceof IHorned'
标签: java inheritance composition