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?
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?
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.
Một bình luận về “Vì sao Java không hỗ trợ đa kế thừa?”