なぜ、子オブジェクトへのインタフェース参照を使用するのですか?例えばなぜ、子オブジェクトへのインタフェース参照を使用するのですか?
:
Map m = new HashMap();
なぜですか?
代わりに、私たちは、あなたが後で他のクラスのオブジェクトに変更することができ
HashMap hm = new HashMap();
なぜ、子オブジェクトへのインタフェース参照を使用するのですか?例えばなぜ、子オブジェクトへのインタフェース参照を使用するのですか?
:
Map m = new HashMap();
なぜですか?
代わりに、私たちは、あなたが後で他のクラスのオブジェクトに変更することができ
HashMap hm = new HashMap();
を使用することができます。たとえば、
Map m = new HashMap();
m = new TreeMap();
このようにすれば、いつでも実装を簡単に変更できます。
注目すべき第2のポイントは、インターフェイス参照を使用することによって、インターフェイスで宣言された子クラスのメソッドだけを呼び出すことができることです。
インターフェイスで宣言されていないオーバーライドされたメソッドではない子クラスのメソッドを呼び出すことはできません。
Joshua Bloch's、Effective Javaより、可能であれば、インタフェースでオブジェクトを参照する方が良いと言います。これにより、プログラムの柔軟性が向上し、実装を切り替える必要がある場合は、コンストラクタのクラス名を変更するだけで済みます。実装を変更する理由は、パフォーマンスが向上したり、機能が追加される可能性があります。
// favorable
List users = new Vector();
// dont do this if possible
Vector users = new Vector();
それのために存在しないインタフェースが存在しない場合、クラスの代わりにインターフェイスによってオブジェクトを参照するために完全に罰金です。