如何访问超类的多个特征之一?

kir*_*uku 22 scala

我有一个从其他一些特征实现的特征.这些特征中的每一个都会覆盖超级视图的行为,并且会混合到一个类中:

trait T { 
  def name = "t"
}
trait T1 extends T {
  abstract override def name = "t1"
}
trait T2 extends T {
  abstract override def name = "t2"
}
class C extends T with T1 with T2 {
  def printName = super.name
}
Run Code Online (Sandbox Code Playgroud)

现在,在课堂上,C我想要访问不是最后一个混合特征的行为,而是访问其中一个特征的行为.这可能吗?

kir*_*uku 27

可以将超级调用专门化为特定特征:

class C extends T with T1 with T2 {
  def printName = super[T1].name
}
Run Code Online (Sandbox Code Playgroud)

  • 只有当上面的"T1"是直接超级特征时才有可能. (10认同)
  • @Nawaz为什么不呢?分享知识是SO的意识.因为我没有找到类似的问题或者已经回答过这个问题的人,我创造了问题和答案. (4认同)
  • +1,圣洁的烟,从来不知道这个功能! (2认同)