解决钻石问题
该钻石的问题 ,或多重继承,由 Scala 使用特征,这是类似 Java 的接口处理。特征比接口更灵活,可以包括实现的方法。这使得特征与其他语言中的 mixin类似。
Scala 不支持从多个类继承,但用户可以在单个类中扩展多个特征:
trait traitA {
  def name = println("This is the 'grandparent' trait.")
}
trait traitB extends traitA {
  override def name = {
    println("B is a child of A.")
    super.name
  }
}
trait traitC extends traitA {
  override def name = {
    println("C is a child of A.")
    super.name
  }
}
object grandChild extends traitB with traitC
grandChild.name
这里 grandChild 继承自 traitB 和 traitC,而 traitB 和 traitC 都继承自 traitA。输出(下面)还显示了在解析首先调用哪些方法实现时的优先顺序:
C is a child of A. 
B is a child of A. 
This is the 'grandparent' trait.
注意,当 super 用于调用 class 或 trait 中的方法时,线性化规则起作用来决定调用层次结构。grandChild 的线性化顺序为:
grandChild - > traitC - > traitB - > traitA - > AnyRef - > Any
以下是另一个例子:
trait Printer {
  def print(msg : String) = println (msg)
}
trait DelimitWithHyphen extends Printer {
  override def print(msg : String) {
    println("-------------")
    super.print(msg)
  }
}
trait DelimitWithStar extends Printer  {
  override def print(msg : String) {
    println("*************")
    super.print(msg)
  }
}
class CustomPrinter extends Printer with DelimitWithHyphen with DelimitWithStar
object TestPrinter{
  def main(args: Array[String]) {
    new CustomPrinter().print("Hello World!")
  }
}
该程序打印:
*************Hello World!
CustomPrinter 的线性化将是:
CustomPrinter - > DelimitWithStar - > DelimitWithHyphen - >打印机 - > AnyRef - >任意