控制父母的函数调用 - 钻石问题?

时间:2018-02-05 20:00:36

标签: scala

在下面的代码中,如果我打印DDD()。嘿()我会看到里面的'9'然后输出1.读取某处因为BBB是混合的最后一个特征。

三种方法可以控制这种与传统的对比吗?例如,如果我想强制CCC的hey()而不是BBB(而不仅仅是交换mixin的顺序)会怎样?

trait AAA {
  def hey(): Int  
}

trait BBB extends AAA {
  override def hey(): Int = 1
}

trait CCC extends AAA {  
  override def hey(): Int = 5
}

case class DDD() extends CCC with BBB {
  override def hey(): Int = 9

  def test(): Int = {
    println("Inside: "+hey())
    super.hey()  // Can I control what 'super' means?  BBB or CCC?
  }
}

1 个答案:

答案 0 :(得分:1)

当然可以:

super[CCC].hey() // 5
super[BBB].hey() // 1

您可能还想了解linearization order