Linearization
The reason why multiple inheritances become a burden when we try to implement them is due to the diamond problem. Take a look at the following image:

Diamond problem
Here, suppose we have an abstract class named Language, that has a method named sayHello. Two traits, named British and Spanish, extend the abstract Language class and define their own implementation of the sayHello method. Then we create a trait, named Socializer, that mixes in the other two traits with a super call to the sayHello method implementation. Now, confusion occurs as to which implementation of sayHello is getting called when we invoke this method. The primary reason for this problem is there's no multiple inheritance in Java, but Scala supports a form of multiple inheritance through trait mix-in. The concept Scala uses to resolve the problem of super calls is linearization. Let's first code for the problem and see it's behavior, then we'll understand linearization and the rules that justify the behavior...