继承一个特性两次



这行不通:

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中的这一章,以获得更好的解释。

这样做主要是为了有一个一致的方法来解决菱形继承问题,在这种情况下是有用的。

由于Trait在线性化后不能出现两次,所以写Trait with Trait是没有意义的,不允许是有意义的。

相关内容

  • 没有找到相关文章

最新更新