Supongamos que tiene lo siguiente:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deerhereda de Animaly Grasshereda de Food.
Hasta aquí todo bien. AnimalLos objetos pueden comer Foodobjetos.
Ahora vamos a mezclarlo un poco. Vamos a agregar un Lionque hereda de Animal.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Ahora tenemos un problema porque Lionpodemos comer ambos Deery Grass, pero Deerno Foodes así Animal.
Sin usar la herencia múltiple y el diseño orientado a objetos, ¿cómo se resuelve este problema?
FYI: Usé http://www.asciiflow.com para crear los diagramas ASCII.
IHuntable, Sheep and Cow son IHerdable(controlables por humanos), y Lion solo implementa IAnimal, lo que no implica ninguna de esas interfaces. AOE3 admite la consulta del conjunto de interfaces compatibles con un objeto particular (similar a instanceof) que permite que un programa consulte sus capacidades.