2016-10-11 10 views
1

クラスが別のクラスを拡張する場合、拡張クラスを拡張するのではなく、初期化することはできますか?クラスが別のクラスを拡張する場合、拡張クラスを拡張するのではなく、初期化することはできますか?

例1:

public class FoodListAdapter extends BaseAdapter{ 
    //rest of the codes in here 
} 

例2:

public class FoodListAdapter { 
    private BaseAdapter fAdapter; 
    //rest of the codes here 
} 

例2は例1と同様の結果を与えることができますか?

+1

一つは、[** IS-**](https://en.wikipedia.org/wiki/Is-a)関係と呼ばれています。もう一つは[** has-a **](https://en.wikipedia.org/wiki/Has-a)という関係です。 –

答えて

0

例1は継承です。

例2は、Has-A関係を表す方向性の片方向結合である集約です。

例1は、直接的にユーザーを基になるBaseAdapterクラスに公開するため、より脆弱です。例2は、BaseAdapterへの呼び出しをカプセル化し、委譲することができます。ある日にBaseAdapterを削除する場合は、FoodListAdapterクラスのユーザーにはわからないことがあります。

+0

Example2が可能ならば、BaseAdapterを使ってどのようにコード化されますか? – emmet4u

+0

これまで行ってきたことは、単にBaseAdapterをコンストラクターまたはセッターメソッドで渡すだけです。 – UserF40

0

両方の戦略が良好です。それは達成しようとしているものによって異なります。

最初の例は継承であり、2番目の例は委譲です。

どちらもよく知られたデザインパターンです。

https://en.m.wikipedia.org/wiki/Delegation_pattern

関連する問題