如果我有一个超类,比如说Animal,
和两个子类:Zebra和Giraffe,
如果我决定定义一个动物矢量:
Vector <Animal> animals = new Vector();
Run Code Online (Sandbox Code Playgroud)
我想说:你可以添加长颈鹿,但你必须先拥有至少一个斑马.
不使用RTTI的最佳方法是什么?(instanceof)
定义自己的类:
class Animals extends Vector<Animal>
{
public Animals(Zebra z) { add(z); }
}
Run Code Online (Sandbox Code Playgroud)
另外两点:
就个人而言,我会选择一种根本不使用继承的设计.因此,我的类将委托给它们而不是子类化vector(或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); }
...
}
Run Code Online (Sandbox Code Playgroud)