Giả sử bạn có những điều sau đây:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deer
kế thừa từ Animal
, và Grass
kế 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 Lion
kế thừa từ Animal
.
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
Bây giờ chúng ta có một vấn đề vì Lion
có thể ăn cả Deer
và Grass
, nhưng Deer
không được Food
nó 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ó.