J'ai une classe abstraite de base (trait). Il a une méthode abstraite foo()
. Il est étendu et implémenté par plusieurs classes dérivées. Je veux créer un trait qui peut être mélangé dans les classes dérivées afin qu'il implémente foo()
puis appelle la foo()
de la classe dérivée.
Quelque chose comme:
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
J'ai essayé les types autonomes et les types structurels, mais je ne peux pas le faire fonctionner.
Tu étais très proche. Ajoutez le modificateur abstrait à M.foo, et vous obtenez le modèle '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