实现Trait时编译错误

时间:2012-12-12 17:20:08

标签: scala traits

鉴于此代码:(无论是否没有多大意义)

    object Test {

          def main(args: Array[String]) {
           (new FooImpl2()).foo()
          }

          trait Foo {
            def foo()
          }

          trait M extends Foo {
            abstract override def foo() {println("M"); super.foo()}
          }

          abstract class FooImpl1 extends Foo {

          }

          class FooImpl2 extends FooImpl1 with M{
            override def foo() {println("Impl2")}
          }

    }

在编译时,会发生此错误:

error: overriding method foo in trait M of type ()Unit;
method foo needs `abstract override' modifiers
override def foo() {println("Impl2")}

所以在这个地方:

class FooImpl2 extends FooImpl1 with M{
    override def foo() {println("Impl2")}
}

为什么override不适用FooImpl1(为了提供抽象特征方法的具体实现)?看起来它与特质方法相匹配......而且显然与模式“abstract override”存在巨大冲突

1 个答案:

答案 0 :(得分:1)

M需要在具体def之后混合(以线性化顺序)。