Załóżmy, że masz:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deerdziedziczy Animali Grassdziedziczy po Food.
Jak na razie dobrze. Animalprzedmioty mogą jeść Foodprzedmioty.
Teraz pomieszajmy to trochę. Pozwala dodać, Lionktóry dziedziczy Animal.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Teraz mamy problem, ponieważ Lionmożemy jeść zarówno Deeri Grass, ale Deertak nie Foodjest Animal.
Bez korzystania z wielokrotnego dziedziczenia i projektowania obiektowego, jak rozwiązać ten problem?
FYI: Użyłem http://www.asciiflow.com, aby stworzyć diagramy ASCII.
IHuntable, Sheep and Cow są IHerdable(kontrolowane przez człowieka), a Lion implementuje tylko IAnimal, co nie implikuje żadnego z tych interfejsów. AOE3 obsługuje sprawdzanie zestawu interfejsów obsługiwanych przez konkretny obiekt (podobny do instanceof), który pozwala programowi sprawdzać jego możliwości.