Припустимо, у вас є наступне:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deerуспадковує від Animal, а Grassуспадковує від Food.
Все йде нормально. Animalпредмети можуть їсти Foodпредмети.
Тепер давайте трохи змішати його. Додамо додавання, Lionяке успадковується від Animal.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Зараз у нас є проблема, тому що Lionможна їсти і те, Deerі це Grass, але Deerце не Foodтак Animal.
Як ви вирішите цю проблему, використовуючи багаторазове успадкування та використовуючи об'єктно-орієнтований дизайн?
FYI: Я використовував http://www.asciiflow.com для створення діаграм ASCII.
IHuntable, Вівці та Корова IHerdable(керовані людиною), а Лев реалізує лише IAnimal, що не передбачає жодного з цих інтерфейсів. AOE3 підтримує запит набору інтерфейсів, підтримуваних певним об'єктом (подібним до instanceof), що дозволяє програмі запитувати його можливості.