65

基本抽象クラス (特性) があります。抽象メソッドを持っていfoo()ます。いくつかの派生クラスによって拡張および実装されます。派生クラスに混在できる特性を作成して、派生クラス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 

自己型と構造型を試しましたが、うまくいきません。

4

1 に答える 1

101

あなたはとても近かった。抽象修飾子をM.fooに追加すると、「スタッカブル特性」パターンが得られます: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
于 2010-01-10T20:32:59.053 に答える