【发布时间】:2010-03-26 06:29:14
【问题描述】:
如果我有一个超类,说 Animal,
还有两个子类:Zebra和Giraffe,
如果我决定定义一个动物向量:
Vector <Animal> animals = new Vector();
我想说:您可以添加长颈鹿,但您必须先拥有至少一头斑马。
不使用 RTTI 的最佳方法是什么? (实例)
【问题讨论】:
如果我有一个超类,说 Animal,
还有两个子类:Zebra和Giraffe,
如果我决定定义一个动物向量:
Vector <Animal> animals = new Vector();
我想说:您可以添加长颈鹿,但您必须先拥有至少一头斑马。
不使用 RTTI 的最佳方法是什么? (实例)
【问题讨论】:
定义你自己的类:
class Animals extends Vector<Animal>
{
public Animals(Zebra z) { add(z); }
}
另外两点:
就个人而言,我会选择完全不使用继承的设计。因此,我的类将委托给他们,而不是子类化向量(或 ArrayList):
class Animals extends
{
private final Vector<Animal> inner = new Vector<Animal>();
public Animals(Zebra z) { add(z); }
// Delegate to whatever methods of Vector that Animals need to support, e.g.,
void add(Animal a) { inner.add(a); }
...
}
【讨论】: