誰かが私に次のコードを説明できますか. 「List」と「ArrayList」が同じではないのはなぜですか?これは、変数neighborColumnsがColumn型オブジェクトを保持するListデータ構造であるが、変数neighborColumnsで使用できるのはクラスListのパブリックメソッドのみであることを意味しますか? 前もって感謝します。
List<Column> neighborColumns = new ArrayList<Column>();
このコードは問題ありません (インターフェース (リスト) への設計: -
List<Column> neighborColumns = new ArrayList<Column>();
List<Column> neighborColumns = new LinkedList<Column>(); // OK To change..
上記のコードでは、基本的に実装ではなくインターフェイスに合わせて設計しています。List はインターフェイスであり、ArrayList はそれを実装する具象クラスです。
利点は、設計を変更することなく、さまざまな実装を切り替えることができることです..
以下のコードは問題です (設計から実装 (ArrayList):-
ArrayList<Column> neighborColumns = new ArrayList<Column>();
//OOPs.. Cry (Incompatible Types)
ArrayList<Column> neighborColumns = new LinkedList<Column>();
ここでは、実装を設計しているため..したがって、RHS の実装を変更することはできません..コンパイラは上記のように泣きます..
したがって、一般的には、常にインターフェースに合わせて設計する必要があります。したがって、実装を公開せず、いつでも実装を変更できる柔軟性を得ることができます。
List
はインターフェースでありArrayList
、そのインターフェースを実装する特定のクラスです。
後で別のリスト実装を使用するように変更することが容易になるため、可能であれば、特定のクラスではなくインターフェイスに対してプログラミングすることをお勧めします。