0

かなり多数のサブクラス(車、自転車など)を持つクラス(乗り物としましょう)があります。すべてのサブクラスには、サブクラスのタイプ (タイヤの数など) に関する特定の情報が格納されます。

このすべての情報が (コンパイル時に) 既に適用されていることを確認したいと思います。したがって、サブクラスのコンストラクターでこのデータを指定したくありません (それらのいくつかを設定するのを忘れる可能性があるため)。この情報を Vehicle のコンストラクターに入れることもできますが、これらのパラメーターが多数あるため、コードがかなり乱雑になります。

public class Vehicle {
  int numberOfTires;

  public Vehicle(int numberOfTires, ...) {
    ...
  }

}

public class Bike {
  public Bike() {
    super(2,...);
    ...
  }

}

完全に読み取り不能なコンストラクターになってしまいます。サブクラスに固有の情報であっても、インスタンスごとにこの情報を保存します。

別の方法は、抽象静的ゲッター/セッターを導入し、サブクラスに情報を保存することです。

public class Vehicle {

  ...
  abstract public int getNumberOfTires();

}

public class Bike {

    static int numberofTires = 2;

    ...

    public int getNumberOfTires() {
      return numberOfTires;
  }

}

これはかなりきれいに見え、インスタンスごとではなくサブクラスごとに情報を保存しますが、サブクラスには多くのコードの重複があります。現在、すべてのサブクラスには ~20 個のセッター/ゲッターが含まれていますが、実際の機能はほとんどありません。これを回避するきれいな方法はありますか?おそらくFactoryメソッドなどを使用していますか?

4

3 に答える 3

0

あなたの立場なら、私ならこうする

public abstract class Vehicle {
    public abstract int getNumberOfTires();
}

public class Bike extends Vehicle {

    @Override
    public int getNumberOfTires() {
        return 2;
    }

}

public class Car extends Vehicle {

    @Override
    public int getNumberOfTires() {
        return 4;
    }

}
于 2014-06-19T13:36:15.340 に答える