这不起作用:
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
问题:
为什么行得通?
第二个片段有何不同? (关于双重继承问题)
第二个片段或样式是否有用?
最佳答案
第二个片段由于特征线性化而起作用。编译器会将这些特征组织到一个线性列表中,这样Trait
仅出现一次。我认为线性化是
Implementation, Trait, Abstraction, ScalaObject, AnyRef, Any
有关详细说明,请参见Programming Scala的this chapter。
这样做主要是为了对钻石继承问题采用一致的方法,在这种情况下很有用。
由于
Trait
不能在线性化之后出现两次,因此写Trait with Trait
没有意义,因此被禁止。关于scala - 两次继承特征,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7230808/