0

私がスーパークラスを持っている場合、動物と言います、

そして2つのサブクラス:ゼブラキリン

動物のベクトルを定義することにした場合:

Vector <Animal> animals = new Vector();

そして私が言いたいのは:キリンを追加することはできますが、最初に少なくとも1つのゼブラを所有している必要があります。

RTTIを使用せずにこれを行うための最良の方法は何ですか?(instanceof

4

1 に答える 1

6

独自のクラスを定義します。

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

2つの追加ポイント:

  • VectorよりもArrayListの使用を優先することをお勧めします。
  • remove()メソッドをオーバーライドして、Zebraが常にコレクションに残るようにすることができます。

個人的には、継承を全く使わないデザインを選びます。したがって、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); }

   ...
}
于 2010-03-26T06:37:50.277 に答える