Vì sao Java không hỗ trợ đa kế thừa?

Java không hỗ trợ đa kế thừa (multiple inheritance) như C++. Vì sao lại thế?

Diamon Problem

Diamon Problem (đôi khi được gọi là “deadly diamond of death”) là một sự mơ hồ xảy ra khi 2 class B và C cùng kế thừa class A, và class D kế thừa từ cả 2 class B và C. Nếu trong class B và C tôi cùng override một method của class A, thì class D sẽ kế thừa method nào? Method của B hay của C?

180px-diamond_inheritance-svg
UML Diagram của Diamond Problem

 

Lấy ví dụ khi lập trình một ứng dụng desktop tôi có 2 class cần thiết là class Rectangle (Thể hiện các object có dạng hình nhữ nhật) và class Clickable (thể hiện các object có thể click được). Class Button (nút bấm) sẽ kế thừa cả 2 class này. Chúng ta đều biết rằng mọi object đều kế thừa từ class Object. Trong cả 2 class Rectangle và Clickable tôi đều override method equals() nhưng  trong class Button thì không. Vậy nếu tôi gọi button1.equals(button2) thì method nào sẽ được gọi? Method trong class Rectange hay method trong class Clickable?

fbe5psv
Tình trạng mơ hồ trong đa kế thừa

Trên thực tế, đa kế thừa nảy sinh nhiều vấn đề hơn cả những vấn đề nó giải quyết được. Do đó mà Java cũng như các ngôn ngữ hiện đại ngày nay đều không có đa kế thừa như C++ hay Object Pascal.

Tác giả: Nguyễn Hải Đăng

Forever a learner.

Một bình luận về “Vì sao Java không hỗ trợ đa kế thừa?”

Bình luận về bài viết này

Java Share Club

Chia sẻ lại là học, đừng ngại chia sẻ

Trung Tuyến Nguyễn - Median Nguyen

TDD craftsman rong chơi giữa đời!