这不起作用:
trait Trait
class Class extends Trait with Trait
编译抱怨:
<console>:8: error: trait Trait is inherited twice
class Class extends Trait with Trait
^
<console>:8: error: trait Trait is inherited twice
class Class extends Trait with Trait
^
这样做:
trait Trait
class Abstraction extends Trait
class Implementation extends Abstraction with Trait
问题:
答案 0 :(得分:20)
第二个片段因特征线性化而起作用。编译器会将特征组织成一个线性列表,以便Trait
只出现一次。我认为线性化是
Implementation, Trait, Abstraction, ScalaObject, AnyRef, Any
请参阅Programming Scala中的this chapter以获得一个很好的解释。
这主要是为了对钻石继承问题采用一致的方法,并且在这种情况下很有用。
由于Trait
在线性化后无法出现两次,因此编写Trait with Trait
没有意义,因此不允许这样做。