親obj =新しい子();理にかなっている?

Javaの場合:

Parent obj = new Child();

私はParent型のオブジェクトを作成しました。私はParentクラスで定義されたメソッドだけを呼び出すことができると仮定します。したがって、Childで定義された "追加の"メソッドやChildで定義されたアクセス変数を呼び出すことはできません。 ですから、私はChildのインスタンスを新しくしたので、それはメモリの無駄だと思います。これは、Parentよりもメモリスペースが増えます。この時点で私はそれが意味をなさないと思う。 誰かが何らかの理由や例を挙げてもらえますか?

1

3 答え

はい、それは理にかなっています。

これは、子を使用したいが、親との対話をメソッドに制限する場合に行います。

このイディオムは、特にJavaコレクションでよく見られます。

List myList = new ArrayList();
4
追加された
Parentクラスが抽象クラスである場合、またはParentクラスがライブラリのパブリックインターフェイスの一部であり、Childクラスが実装の詳細である場合によく使用されます。
追加された 著者 Dan Davies Brackett,

はい、それはポリモーフィズムと継承プログラミングの概念の一部です。

2
追加された

このイディオムは、具体的な実装の変更を促すために使用されます。 Joshua Blochによれば、Effective Java(Item 52)

インタフェースを型として使う習慣があれば、プログラムはより柔軟になります。実装を切り替えることを決めたら、コンストラクタのクラス名を変更するだけです。異なる静的な工場)

1
追加された