The diamond problem is one the main issue with multiple inheritance.

Java solves the problem by not allowing multiple inheritance and replacing it with interfaces. 

Scala does not allow multiple inheritance either, but replaces interfaces with traits. 
A trait is basically an interface with optional implementations. A class can mix in multiple traits.

In these two parts article I discuss traits in-depth. Among the topics touched there are stackable traits, linearization, initialization and how to use traits to define public APIs.

Part 1:

Part 2: