如何理解这三种定义方式
Collection arr1 = new ArrayList();
List arr2 = new ArrayList();
ArrayList arr3 = new ArrayList();
大家讲道理2017-04-17 16:46:08
更新された回答:
実際には、3 つの状況ではなく 2 つの状況があります。
実際の開発でよく遭遇するシナリオの例を示します。これにより、「オブジェクトを親クラスまたは親インターフェイスに変換して使用する必要があることがよくある」理由が理解できるでしょう。
通常、リストを使用するときは次のように書きます:
リーリーの代わりに
リーリーなぜ最初の方が 2 番目よりも優れているのでしょうか?
2 つの方法でリストを宣言し、それが他の人によって参照される (または他の場所で自分自身が使用される) とします。
ある日突然、ArrayList の使用は良くないため、LinkedList に置き換える必要があることがわかり、ステートメントを次のように変更する必要があります。 リーリー
このように、リストが使用される場合は常に型宣言を変更する必要があります。さらに重要なのは、リストを使用する人は、「リストは ArrayList である」という前提に基づいて独自のコードを作成するため、それを突然 LinkedList に変更すると、プログラムが壊れたり、書き直す必要が生じたりする可能性があります。しかし、最初から最初の宣言方法を使用すれば、この問題は発生しません。リストはいつでも変更でき、リストを参照する他の人や他の場所は変更を加える必要はありません。例:
リーリー
したがって、変数を宣言するときは、その型をできるだけ一般的に、できるだけ具体的に宣言してください。前者は変更にフレンドリーですが、後者は変更にフレンドリーではありません。同様に、メソッドのアクセシビリティ (パブリック、プロテクト、デフォルト、プライベートなど) を決定する場合、可能な限り小さいほど良いです。
PHP中文网2017-04-17 16:46:08
ArrayList は List インターフェイスを実装するため、ArrayList は List 型である必要があります。同様に、List は Collection インターフェイスを実装するため、List は Collection 型である必要があります。 ArrayList の上方変換としても理解できます。
PHP中文网2017-04-17 16:46:08
たとえば、あなたはワインの神様で、ワインが特に好きだとします。ある日、家に帰ると、テーブルの上に白ワインが何杯も置かれていました。それが何のワインであるかは、飲んでみて初めてわかりました。これを飲むと建南春、もう一度飲むと五稜液、また飲むと九桂酒…と表現できます。
リーリー