以下是例子:
class A {
def postStop() {
println("A.postStop")
}
}
class B extends A with C {
override def postStop() {
println("B.postStop")
}
}
trait C { this: B =>
override def postStop() { // here I expected a warning
println("C.postStop")
}
}
object Main {
def main(args: Array[String]) {
new A().postStop()
}
}
此代码打印B.postStop
,并且会自动忽略C.postStop
覆盖。为什么没有打印警告?这是一个错误还是一个功能?
答案 0 :(得分:2)
在这种情况下,无法发出警告,因为编译器无法确定永远不会调用C.postStop()
。可以在某处定义另一个类,它扩展B
和C
并显式调用C.postStop()
:
class D extends B with C {
override def postStop() {
super[C].postStop()
}
}
这将在您使用时调用C.postStop()
:
scala> D().postStop()
C.postStop