1

オブジェクトを使用して参照名を作成することと、インターフェイスを使用して参照名を作成することの違いは何ですか。

ex1

ArrayList li=new ArrayList();// creating reference  using class name

ex2

List li=new ArrayList()//creating reference  using interface name

実際のシナリオでは、開発者が ex2 を使用する理由は何ですか?

ex2 を使用する利点は何ですか?

4

3 に答える 3

2

2 番目のアプローチは、インターフェイスへのプログラミングです。選択した実装の動作のいくつかの側面 (パフォーマンス特性や並べ替え順序など)に依存している可能性がありますが、インターフェイスで宣言されたメンバーのみに依存していることは明らかです。これにより、後である実装を別の実装に簡単に交換できます。

(実装の非常に特定の側面に依存している場合、後で驚くことを避けるために、明示的にそう言うのが通常は良い考えだと思います。)

于 2012-09-29T12:13:27.870 に答える
2

これは、実装ではなく契約にコーディングしていることを意味します。あなたの例では、リストの連絡先です。後で別のタイプのリストが必要になった場合は、宣言を行う行を 1 行変更するだけです。これにより、将来の変更が容易になります。

リストにない ArrayList の特定のメソッドが必要な場合は、ex1 を使用することが有効です。ただし、ArrayList から変更する場合は難しくなる可能性があります。このリンクは役に立つかもしれませんhttp://jdevelopment.nl/java-best-practices-5-code-to-interface-access-by-name-and-instance-data/

于 2012-09-29T12:15:03.607 に答える
0

2 番目の方法には、さらに多くの利点があります。

HashSetまたはへの参照をTreeSetSet 型の変数に格納することは、適切なスタイルと見なされます。例えば:

Set<String> names = new HashSet<String>();

このように、代わりに TreeSet を使用する場合は、1 行だけ変更する必要があります。

また、セットを操作するメソッドは、Set 型のパラメーターを指定する必要があります。

public static void print(Set<String> s)

その後、メソッドはすべてのセットの実装に使用できます。

于 2013-08-21T11:50:02.613 に答える