Angenommen, Sie haben Folgendes:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deer
erbt von Animal
und Grass
erbt von Food
.
So weit, ist es gut. Animal
Objekte können Food
Objekte essen .
Jetzt mischen wir es ein bisschen durch. Fügen wir ein hinzu, von Lion
dem erbt Animal
.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Jetzt haben wir ein Problem, weil wir Lion
beides essen können Deer
und Grass
, aber es Deer
ist nicht Food
so Animal
.
Wie können Sie dieses Problem lösen, ohne Mehrfachvererbung und objektorientiertes Design zu verwenden?
Zu Ihrer Information: Ich habe http://www.asciiflow.com verwendet , um die ASCII-Diagramme zu erstellen.
IHuntable
, Sheep and Cow sind IHerdable
(von Menschen kontrollierbar), und Lion implementiert nur IAnimal, was keine dieser Schnittstellen impliziert. AOE3 unterstützt die Abfrage der Schnittstellen, die von einem bestimmten Objekt (ähnlich wie instanceof
) unterstützt werden, wodurch ein Programm seine Funktionen abfragen kann.