我有一个基础抽象类(trait)。它有一个抽象方法foo()
。它由几个派生类扩展和实现。我想创建一个可以混合到派生类中的特征,以便它实现foo()
然后调用派生类的foo()
。
类似的东西:
trait Foo {
def foo()
}
trait M extends Foo {
override def foo() {
println("M")
super.foo()
}
}
class FooImpl1 extends Foo {
override def foo() {
println("Impl")
}
}
class FooImpl2 extends FooImpl1 with M
我尝试过自我类型和结构类型,但我无法让它起作用。
答案 0 :(得分:96)
你非常接近。将抽象修饰符添加到M.foo,并且您具有“Stackable Trait”模式:http://www.artima.com/scalazine/articles/stackable_trait_pattern.html
trait Foo {
def foo()
}
trait M extends Foo {
abstract override def foo() {println("M"); super.foo()}
}
class FooImpl1 extends Foo {
override def foo() {println("Impl")}
}
class FooImpl2 extends FooImpl1 with M