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.

Chia sẻ :

  • Facebook
  • Email
Thích Đang tải...

Có liên quan

Hình đại diện của Không hiểu

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

Forever a learner. Xem tất cả bài viết của Nguyễn Hải Đăng

Từ khóa » Java đa Kế Thừa