このコードを考えると:(あまり意味がないかどうかに関係なく)
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
"との大きな競合があります