Lớp cơ sở A
có một phân lớp B
và B
có một phân lớp C
. A
triển khai phương thức ảo doStuff()
, B
không và C
. Từ C
, tôi muốn gọi A
'thi hành doStuff()
s (Tôi làm điều này từ bên trong C
' thi hành doStuff()
s nhưng điều đó nên không thực sự quan trọng.) Tôi có nên gọi:Gọi các phương thức có tên giống nhau trong các lớp cơ sở
A::doStuff();
Hoặc:
B::doStuff();
Điều đầu tiên có vẻ rõ ràng hơn vì nó đề cập đến việc triển khai thực tế. Mặt khác, thứ hai có thể hữu ích hơn nếu sau này tôi quyết định rằng B
cần phải doStuff()
khác với A
. Tiêu chuẩn nào hơn? Điều gì nguy hiểm hơn?
Tôi hơi ngạc nhiên khi B::doStuff()
không kích hoạt bất kỳ cảnh báo nào, nhưng tôi cho rằng theo định nghĩa B
có triển khai ngay cả khi nó thuộc lớp cơ sở. Chuỗi các lớp cơ sở và triển khai có thể tùy ý lâu dài và phức tạp không? Ví dụ, nếu tôi có A
thông qua Z
, mỗi lớp con của lớp trước, tôi có thể triển khai ở bất kỳ vị trí nào trong chuỗi không, và gọi phương thức của bất kỳ lớp nào chỉ cần đi 'lên chuỗi' cho đến khi nó tìm thấy triển khai?
Điều đó trông giống như một lựa chọn rất gọn gàng và hữu ích. – Luke