0

如果我有一个超类,比如说Animal

和两个子类:斑马长颈鹿

如果我决定定义一个动物向量:

Vector <Animal> animals = new Vector();

我想说:你可以加长颈鹿,但你必须先拥有至少一只斑马

不使用 RTTI 的最佳方法是什么?(实例

4

1 回答 1

6

定义你自己的类:

class Animals extends Vector<Animal>
{
   public Animals(Zebra z) { add(z); }
}

补充两点:

  • 建议优先使用 ArrayList 而不是 Vector。
  • 您可能想要覆盖 remove() 方法以确保 Zebra 始终保留在集合中。

就个人而言,我会选择根本不使用继承的设计。因此,我的类将委托给他们,而不是子类化向量(或 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); }

   ...
}
于 2010-03-26T06:37:50.277 回答