0

Policy という抽象クラスがあり、DepreciablePolicy と ExpirablePolicy の 2 つのサブクラスがあります。 Policy、policies[] の配列があります。

オブジェクトがどのサブクラスにあるかを確認したい (ポリシー、DepreciablePolicy、または ExpirablePolicy の場合)

この if ステートメントを使用してこれを行いました。

if (this.policies[polNum] instanceof DepreciablePolicy){

サブクラスのタイプごとに、実行する必要があるメソッドが異なります。唯一の問題は、Policy メソッドしか使用できず、サブクラスのメソッドやコンストラクターを使用できないことです。これを行う方法はありますか?

4

2 に答える 2

5

サブクラスのタイプごとに、実行する必要があるメソッドが異なります。

それから、あなたはそれを誤って設計しました。ポリシーで抽象メソッドを定義し、すべての派生クラスが独自の要件に従ってそれを実装するようにします。次に、メソッドを呼び出すだけです。

于 2013-02-14T02:07:18.803 に答える
5

これは間違った方法で行われた継承です。ポリモーフィズムの要点は、オブジェクトがどのサブクラスであるかをコードが気にしないことです。実行する必要があることはすべて、ポリシーを通じて表現する必要があります。これは、実際にはインターフェイスである必要があります。コードはそのインターフェースに基づいて Policy と対話する必要があり、サブクラスは反応方法を選択します。

そうは言っても、おそらく単純なダウンキャストを探しているでしょう:

DepreciablePolicy d = (DepreciablePolicy) policy;

ただし、これは悪いデザインの貧弱な包帯に勝るものはありません.

于 2013-02-14T02:07:27.170 に答える