agi*_*eel 18 inheritance scala linearization
这不起作用:
trait Trait
class Class extends Trait with Trait
Run Code Online (Sandbox Code Playgroud)
编译抱怨:
<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
^
Run Code Online (Sandbox Code Playgroud)
这样做:
trait Trait
class Abstraction extends Trait
class Implementation extends Abstraction with Trait
Run Code Online (Sandbox Code Playgroud)
问题:
huy*_*hjl 20
第二个片段因特征线性化而起作用.编译器会将特征组织成一个线性列表,以便Trait只出现一次.我认为线性化是
Implementation, Trait, Abstraction, ScalaObject, AnyRef, Any
Run Code Online (Sandbox Code Playgroud)
请参阅Programming Scala中的本章以获得一个很好的解释.
这主要是为了对钻石继承问题采用一致的方法,并且在这种情况下很有用.
由于Trait线性化后不能出现两次,所以写入没有Trait with Trait意义,不允许有意义.