Mình cũng hiểu ý bạn.
Ý mình tức là thế này: Chúng ta có 1 biến kiểu Animal để lưu trữ địa chỉ của đối tượng của class Horse, và biến kiểu Animal này là biến tham chiếu, khi tham chiếu đến biến animal ta sẽ được địa chỉ của đối tượng của class Horse. Mà thực chất thì biến animal chính là 1 con trỏ đang trỏ đến đối tượng Horse.
Về việc tại sao lại gọi run() báo lỗi, theo mình nghĩ như này:
- Đối tượng của class Animal sẽ lưu trữ 100 bytes (giả dụ).
- Vì class Horse kế thừa từ class Animal nên nó sẽ kế thừa 100 bytes của class Animal và nó có thêm 50 bytes riêng của nó (vì nó có thêm phương thức run()).
- Bởi vì biến animal có kiểu Animal nên biến animal chỉ đọc được 100 bytes của đối tượng của class Horse, và trong 100 bytes đó không có phương thức run() nên nó không thực hiện được.
Mình biết ít nên có gì pro sửa giúp. Thanks