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:
“A poet who makes use of a worse word instead of a better, because the former fits the rhyme or the measure, though it weakens the sense, is like a jeweller, who cuts a diamond into a brilliant, and diminishes the weight to make it shine more.”
—Horace Walpole (17171797)
“Congress seems drugged and inert most of the time. ...Its idea of meeting a problem is to hold hearings or, in extreme cases, to appoint a commission.”
—Shirley Chisholm (b. 1924)