scala - sirve - que es una clases abstractas
Los rasgos y los métodos abstractos anulan en Scala (1)
Tengo una clase abstracta base (rasgo). Tiene un método abstracto foo()
. Es extendido e implementado por varias clases derivadas. Quiero crear un rasgo que pueda mezclarse en las clases derivadas para que implemente foo()
y luego invoque el foo()
la clase derivada.
Algo como:
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
Intenté auto tipos y tipos estructurales, pero no puedo hacer que funcione.
Estabas muy cerca. Agregue el modificador abstracto a M.foo, y tiene el patrón ''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