その後の飲み会の席で、こんな話題がでた。 「Scalaって菱形継承をどう解決してんの?」 Scalaを勉強中とはいえ、まだまだ勉強が足りない僕は、その質問にきちんと答えることができなかったので、ちょっと調べてみた。 ■菱形継承問題とは 菱形継承問題とは、多重継承を認めているプログラム言語において、クラスが上記の図のような継承関係にあり、BとCがAのメソッドをそれぞれ異なる形でオーバーライドしていた場合、DのクラスはBかC、いずれのメソッドを継承するのか、という問題である。 JavaやC#などの言語では、そもそも多重継承を認めておらず、インターフェイスも最終的に具象化すべきクラス(上記図でいうとD)にて具体的な実装がなされるため、菱形継承は問題にならない。 ■Scalaのトレイトではどうなる? ScalaもJavaやC#と同様、言語仕様としてクラスの多重継承を認めていない。その一方でインター