The diamond problem

Multiple inheritance suffers from the diamond problem.

Let's have a look at the following diagram:

Here, both B and C extend A, and then D extends B and C. Some ambiguities might arise from this. Let's say that there was a method that was originally defined in A, but both B and C override it. What would happen if D calls this method? Which one will it exactly call?

All the preceding questions make things ambiguous and this could lead to mistakes. Let's try and reproduce this in Scala using traits:

trait A {  def hello(): String = "Hello from A"}trait B extends A {  override def hello(): String = "Hello from B"}trait C extends ...

Get Scala Design Patterns - Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.