0

私は混乱しています。
抽象クラス「Person」を作成し、クラス「パートタイム従業員」を Person から拡張します。次に、'Full-Time Employee' という Person から抽象クラスを拡張します。
次に、「New Full-Time Employee」と「Tenured Full-Time Employee」という 2 つの新しいクラスを作成します。どちらも Full-Time Employee から拡張されています。

ArrayList 内のすべての従業員を追跡したいのですが、ここで概念的に立ち往生しています。ArrayList を拡張する Database というクラスを作成します。

配列が必要な 3 つのクラスすべてを保持できるようにするにはどうすればよいですか? Abstract クラス型の配列を作成しますか? そのため、継承されたクラスで定義したメソッドにアクセスできないと思います...また、ArrayListから拡張することはお勧めできないことも読みました...だから、 ArrayList を持つデータベース クラス ? それでも、今後定義したすべてのものにアクセスできますか?

リスト全体を表示したい場合のように、使用する表示関数をどのように知るのでしょうか? tenuredFullTimeEmployee か NewFullTimeEmployee か?

ありがとうございました!!

4

1 に答える 1

0

いくつかのオプションがあります。クラスの動作のみが異なる場合は、戦略パターンを使用できます。さまざまなタイプのオブジェクトを List オブジェクトに保持し、そのタイプに基づいてさまざまなことを行う必要がある場合は、ビジター パターンを使用できます。私の推測では、その継承の一部を捨てて、クラスごとに異なる動作を抽象化する戦略のようなものを使用する必要があります。

http://www.oodesign.com/strategy-pattern.html

http://www.oodesign.com/visitor-pattern.html

2番目の質問に答えるには、あなたは正しいです... ArrayListを拡張するのではなく、次のようなものが必要です

List<Person> people = new ArrayList<Person>();

次に、上記の 2 つの推奨パターンのいずれかを使用して、さまざまな動作を処理できます。

于 2012-07-27T17:43:23.790 に答える