在Scala中重载特性和抽象方法

我有一个基本的抽象类(特质)。 它有一个抽象方法foo() 。 它由几个派生类扩展和实现。 我想创build一个可以混合到派生类中的特征,以便它实现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 

我尝试了自我types和结构types,但是我无法得到它的工作。

你非常接近。 将抽象修饰符添加到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