菱形継承の概念図 菱形継承問題(ひしがたけいしょうもんだい、英: diamond problem)は、多重継承を伴うオブジェクト指向プログラミング言語において、クラス A を2つのクラス B と C が継承し、B と C の両方をクラス D が継承する際に発生するあいまいさを指す用語である。たとえば、クラス D にあるメソッドが A で定義された(かつ D においてオーバーライドされていない)メソッドを呼び出すとしたとき、B と C がそのメソッドを異なった形でオーバーライドしていたら、D は B と C のどちらのメソッドを継承するのか、という問題がある[1]。 例えば、クラス Button は クラス Rectangle(見た目のため)と Mouse(マウスイベントのため)を継承し、Rectangle も Mouse も Object クラスを継承しているとする。ここで Button
![菱形継承問題 - Wikipedia](https://cdn-ak-scissors.b.st-hatena.com/image/square/91a1d1035daddf97f351aaf9ffa23d688f13a3ee/height=288;version=1;width=512/https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2F8%2F8e%2FDiamond_inheritance.svg%2F1200px-Diamond_inheritance.svg.png)