検索

ホームページ  >  に質問  >  本文

Java集合框架中的多态

如何理解这三种定义方式

Collection arr1 = new ArrayList();
List       arr2 = new ArrayList();
ArrayList  arr3 = new ArrayList();
PHP中文网PHP中文网2784日前888

全員に返信(5)返信します

  • 大家讲道理

    大家讲道理2017-04-17 16:46:08

    更新された回答:
    実際には、3 つの状況ではなく 2 つの状況があります。
    実際の開発でよく遭遇するシナリオの例を示します。これにより、「オブジェクトを親クラスまたは親インターフェイスに変換して使用する必要があることがよくある」理由が理解できるでしょう。

    通常、リストを使用するときは次のように書きます:

    リーリー

    の代わりに

    リーリー

    なぜ最初の方が 2 番目よりも優れているのでしょうか?

    2 つの方法でリストを宣言し、それが他の人によって参照される (または他の場所で自分自身が使用される) とします。

    ある日突然、ArrayList の使用は良くないため、LinkedList に置き換える必要があることがわかり、ステートメントを次のように変更する必要があります。 リーリー

    このように、リストが使用される場合は常に型宣言を変更する必要があります。さらに重要なのは、リストを使用する人は、「リストは ArrayList である」という前提に基づいて独自のコードを作成するため、それを突然 LinkedList に変更すると、プログラムが壊れたり、書き直す必要が生じたりする可能性があります。

    しかし、最初から最初の宣言方法を使用すれば、この問題は発生しません。リストはいつでも変更でき、リストを参照する他の人や他の場所は変更を加える必要はありません。例:

    リーリー

    したがって、変数を宣言するときは、その型をできるだけ一般的に、できるだけ具体的に宣言してください。前者は変更にフレンドリーですが、後者は変更にフレンドリーではありません。

    同様に、メソッドのアクセシビリティ (パブリック、プロテクト、デフォルト、プライベートなど) を決定する場合、可能な限り小さいほど良いです。

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 16:46:08

    これは、サブクラスのオブジェクトを参照する親クラス、つまりポリモーフィズムの必要条件の 1 つである上向き変換です

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 16:46:08

    ArrayList は List インターフェイスを実装するため、ArrayList は List 型である必要があります。同様に、List は Collection インターフェイスを実装するため、List は Collection 型である必要があります。 ArrayList の上方変換としても理解できます。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 16:46:08

    親クラスの参照はサブクラス オブジェクトを指します

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 16:46:08

    たとえば、あなたはワインの神様で、ワインが特に好きだとします。ある日、家に帰ると、テーブルの上に白ワインが何杯も置かれていました。それが何のワインであるかは、飲んでみて初めてわかりました。これを飲むと建南春、もう一度飲むと五稜液、また飲むと九桂酒…と表現できます。

    リーリー

    返事
    0
  • キャンセル返事