鉴于此代码:(无论是否没有多大意义)
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
”存在巨大冲突
答案 0 :(得分:1)
M需要在具体def之后混合(以线性化顺序)。