ventajas una sirve que poo para metodo interfaces instanciar ejemplo clases clase abstracto abstractas abstracta scala traits

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