次のものがあるとします:
+--------+ +------+
| 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
、プログラムがその機能を照会できるようにする特定のオブジェクト(に類似)がサポートするインターフェースのセットの照会をサポートします。