我想将stackable trait pattern与单例对象一起使用,但我似乎无法找到如何使编译器满意:
abstract class Pr {
def pr()
}
trait PrePostPr extends Pr {
abstract override def pr() {
println("prepr")
super.pr()
println("postpr")
}
}
object Foo extends Pr with PrePostPr {
def pr() = println("Foo")
}
尝试在repl中对此进行评估会产生以下错误:
<console>:10: error: overriding method pr in trait PrePostPr of type ()Unit;
method pr needs `override' modifier
def pr() = println("Foo")
答案 0 :(得分:13)
它可以,但是像这样:
abstract class Pr {
def pr()
}
trait PrePostPr extends Pr {
abstract override def pr() {
println("prepr")
super.pr()
println("postpr")
}
}
class ImplPr extends Pr {
def pr() = println("Foo")
}
object Foo extends ImplPr with PrePostPr
实现必须存在于其中一个超类/超级类中。抽象修改特征必须在继承列表中具有实现的类/特征之后。