1

Javaドキュメントや他のプログラミングの本で見たように、オブジェクトが作成されるさまざまな方法で混乱が生じています。例えば

とが存在すると仮定base classしてderived class

1-型Baseのオブジェクトを参照する型の変数がありますDerived

List<String> list = new ArrayList<String>();

2-タイプDerivedのオブジェクトを参照するタイプの変数がありますDerived

ArrayList<String> arrList = new ArrayList<String>();

私の質問は、1と2のどちらかを選択するときに私の考えはどうあるべきかということです。Polymorphism一般的なベース派生シナリオを利用することですか?

better practiceが気付いていない1と2のどちらかを選択している間はありますか、それとも単なるpersonal decisionですか?

編集:

申し訳ありませんが、リストはインターフェースです。 別の質問:Typeパラメーターを使用すると、決定は変わりますか?

ArrayList<T> list = new ArrayList<T>();

回答の更新:これは実際にはと呼ばれ"Programming to the interface"ます。コードの達人に感謝します。私が探していたものは、この質問に対する答えの1つで、非常に簡単な言葉で説明されています。「インターフェイスにプログラムする」とはどういう意味ですか。

4

3 に答える 3

4
  1. Listは基本クラスではないため、interface可能な限り使用する必要があります。

    クラスが実装するインターフェースを使用すると、特定のクラスだけでなく、インターフェースを実装するすべてのクラスを操作できます。

  2. Stringは具象クラスなので、直接使用する方がはるかに明確です。

    ただし、インターフェイスをString実装していても、混乱を招くため、使用する必要がない場合もあります。ただし、を見てください、それはほとんど排他的に使用します。CharSequenceCharSequenceStringBuilderCharSequence

要約すると、適切なものがあるだけでこれ以上のことはありません。

于 2013-02-17T23:44:41.110 に答える
3

基本タイプを選択すると、将来のある時点で、残りのコードを変更せずに、ArrayListを使用してLinkedListを指定するかどうかを変更できます。これにより、後でリファクタリングするための柔軟性が高まります。同様に、パブリックメソッドは、同じ理由で特定のタイプのリスト実装ではなくリストを返す必要があります。これにより、呼び出し元との契約を破ることなく、パフォーマンスを最適化するように内部実装を変更できます。

于 2013-02-17T23:45:25.917 に答える
1

Listがクラスの場合(質問に答えるために、 「子クラスを表す親クラスのオブジェクトを使用しますか、それとも派生クラス(アクチュラクラス)型のオブジェクトを使用しますか?」

1)あなたは正しかった、それはポリモーフィズムの目的のためだけだった。

2)主に、さまざまなクラスメソッドにオブジェクトを渡すために使用されます。他のクラスのメソッドは、親クラスに入力を受け入れている可能性があります。あなたはそれらの場所で鋳造を使わなければなりません。

于 2013-02-19T17:09:30.377 に答える