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