私は少し混乱しており、Map の宣言とインスタンス化のための 2 つの異なるアプローチの違いと異なる利点についての説明を探しています。
違いは何ですか
Map<String, String> myMap = new HashMap<String, String>;
と
HashMap<String, String> myMap = new HashMap<String, String>;
スーパークラス変数を宣言し、それをサブクラスでインスタンス化する利点または理由は何ですか?
私は少し混乱しており、Map の宣言とインスタンス化のための 2 つの異なるアプローチの違いと異なる利点についての説明を探しています。
違いは何ですか
Map<String, String> myMap = new HashMap<String, String>;
と
HashMap<String, String> myMap = new HashMap<String, String>;
スーパークラス変数を宣言し、それをサブクラスでインスタンス化する利点または理由は何ですか?
これを「インターフェースへのプログラミング」と呼びます。(Mapはインターフェースであり、クラスではありません。) これにより、操作のみを必要とするコードは、それが実際Mapにどのようなものであるかを気にする必要がMapなくなります。
たとえば aが適切であると思われる場合HashMapは、簡単に for を切り替えることができ、他のコードは変更されません。TreeMap
他の同様の質問:
その他の参照:
最初のバージョンは実装に Hashmap を使用しますが、myMap の Map のメンバーのみを公開します。
つまり、HashMap の機能を利用できますが、Map のインターフェースを介してのみ利用できます。このようにして、実装を変更できますが、同じインターフェイス メンバーを引き続き使用できます。