Khi sử dụng phương pháp lập trình hướng đối tượng, tại sao Java hay các ngôn ngữ lập trình bậc cao không hỗ trợ tính chất đa kế thừa nữa trong khi C/C++ vẫn còn hỗ trợ vậy?
Sau nhiều giờ đào bới và tìm hiểu, cuối cùng mình cũng hiểu ra, chia sẻ lại cho những bạn cần,
Sở dĩ Java và các ngôn ngữ lập trình bậc cao khác không hỗ trợ đa kế thừa là bởi vì:
Thứ nhất là về ý nghĩa triết lý khi các ngôn ngữ lập trình bậc cao được tạo ra là "càng đơn giản càng tốt":
Triết lý của ngôn ngữ Java:
Đơn giản, hướng đối tượng, có thể phân tán, một cho tất cả (cùng một chương trình có thể thực thi cho mọi nền tảng), mạnh mẽ, an toàn, đa luồng, .... James Gosling
-
- Đẹp thì tốt hơn xấu
- Tuyệt đối thì tốt hơn tương đối
- Đơn giản thì tốt hơn phức tạp
- .....................................
Thứ hai là về việc sử dụng đa kế thừa tồn tại một vấn đề như sau:
Hai lớp B và C cùng kế thừa từ một lớp cha là lớp A, giả sử B và C overriding phương thức của lớp A (overriding tức là B và C không những cùng kế thừa một phương thức nào đó từ lớp A mà còn sửa lại phương thức đã kế thừa đó tùy thuộc vào B hoặc C). Khi D tiếp tục kế thừa phương thức này từ B và C, D nên chọn phương thức của lớp B hay của phương thức của C để kế thừa ??? - Vấn đề này thuật ngữ tiếng Anh gọi là Diamond Problem.
Java không cho phép sử dụng đa kế thừa nhưng đổi lại Java cho phép sử dụng interfaces có chức năng tương tự như đa kế thừa.
Mình không rành về CNTT lắm, nhưng vấn đề này thì mình có đọc qua ở đây. Mặc dù câu trả lời mình thấy có vẻ cũng không thỏa đáng lắm, nhưng thoi mình để đây hy vọng giúp ích cho bạn
https://javapapers.com/core-java/why-multiple-inheritance-is-not-supported-in-java/