The Diamond Problem
The "diamond problem" (sometimes referred to as the "deadly diamond of death") is an ambiguity that arises when two classes B and C inherit from A, and class D inherits from both B and C. If D calls a method defined in A (and does not override the method), and B and C have overridden that method differently, then from which class does it inherit: B, or C?
For example, in the context of GUI software development, a class Button
may inherit from both classes Rectangle
(for appearance) and Clickable
(for functionality/input handling), and classes Rectangle
and Clickable
both inherit from the Object
class. Now if the equals
method is called for a Button
object and there is no such method in the Button
class but there is an overridden equals
method in both Rectangle
and Clickable
, which method should be eventually called?
It is called the "diamond problem" because of the shape of the class inheritance diagram in this situation. In this article, class A is at the top, both B and C separately beneath it, and D joins the two together at the bottom to form a diamond shape.
Read more about this topic: Multiple Inheritance
Famous quotes containing the words diamond and/or problem:
“I really think that American gentlemen are the best after all, because kissing your hand may make you feel very very good but a diamond and a sapphire bracelet lasts forever.”
—Anita Loos (18931981)
“But a problem occurs about nothing. For that from which something is made is a cause of the thing made from it; and, necessarily, every cause contributes some assistance to the effects existence.”
—Anselm of Canterbury (10331109)