私がスーパークラスを持っている場合、動物と言います、
そして2つのサブクラス:ゼブラとキリン、
動物のベクトルを定義することにした場合:
Vector <Animal> animals = new Vector();
そして私が言いたいのは:キリンを追加することはできますが、最初に少なくとも1つのゼブラを所有している必要があります。
RTTIを使用せずにこれを行うための最良の方法は何ですか?(instanceof)
独自のクラスを定義します。
class Animals extends Vector<Animal>
{
public Animals(Zebra z) { add(z); }
}
2つの追加ポイント:
個人的には、継承を全く使わないデザインを選びます。したがって、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); }
...
}