Traits and abstract methods override in Scala
45,448
You were very close. Add the abstract modifier to M.foo, and you have the 'Stackable Trait' pattern: 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
Author by
IttayD
Updated on July 08, 2022Comments
-
IttayD almost 2 years
I have a base abstract class (trait). It has an abstract method
foo()
. It is extended and implemented by several derived classes. I want to create a trait that can be mixed into the derived classes so that it implementsfoo()
and then calls the derived class'sfoo()
.Something like:
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
I tried self types and structural types, but I can't get it to work.