Giả sử bạn có những điều sau đây:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deerkế thừa từ Animal, và Grasskế thừa từ Food.
Càng xa càng tốt. Animalđồ vật có thể ăn Foodđồ vật.
Bây giờ hãy trộn nó lên một chút. Cho phép thêm một Lionkế thừa từ Animal.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Bây giờ chúng ta có một vấn đề vì Lioncó thể ăn cả Deervà Grass, nhưng Deerkhông được Foodnó là Animal.
Với việc sử dụng nhiều kế thừa và sử dụng thiết kế hướng đối tượng, làm thế nào để bạn giải quyết vấn đề này?
FYI: Tôi đã sử dụng http://www.asciiflow.com để tạo sơ đồ ASCII.
IHuntable, Sheep và Cow IHerdable(được điều khiển bởi con người) và Lion chỉ thực hiện IAnimal, không ngụ ý bất kỳ giao diện nào. AOE3 hỗ trợ truy vấn bộ giao diện được hỗ trợ bởi một đối tượng cụ thể (tương tự instanceof) cho phép chương trình truy vấn các khả năng của nó.