次のものがあるとします:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deerから継承しAnimal、からGrass継承しFoodます。
ここまでは順調ですね。Animalオブジェクトはオブジェクトを食べることができFoodます。
それでは少し混ぜましょう。Lionを継承するを追加しましょうAnimal。
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
今、私たちはので、問題を持っている必要がありLion、両方を食べることができるDeerとGrass、しかし、Deerされていない FoodことがありますAnimal。
多重継承を使用せずに、オブジェクト指向設計を使用して、この問題をどのように解決しますか?
参考までに、http://www.asciiflow.comを使用してASCIIダイアグラムを作成しました。
IHuntable、SheepとCowはIHerdable(人間によって制御可能)、LionはIAnimalのみを実装しますが、これらのインターフェースは含まれていません。AOE3はinstanceof、プログラムがその機能を照会できるようにする特定のオブジェクト(に類似)がサポートするインターフェースのセットの照会をサポートします。