0

给定这段代码:(不管它是否没有多大意义)

    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(以便为抽象特征方法提供具体实现)?似乎它与 trait 方法相匹配......显然与模式“ abstract override”存在巨大冲突

4

1 回答 1

1

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

于 2012-12-12T17:31:58.873 回答