给定这段代码:(不管它是否没有多大意义)
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
”存在巨大冲突