假设您具有以下条件:
+--------+ +------+
| 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
)所支持的接口集,从而允许程序查询其功能。