9

次のエラーメッセージはどういう意味ですか?

両方によってオーバーライドされる3番目のメンバーなしで具象メンバーをオーバーライドすることはできません(このルールは、「偶発的なオーバーライド」を防ぐように設計されています);

私は積み重ね可能な特性の変更を行おうとしていました。私はすでに階層を設定していて、多くのコードを書き直さなくても動作を変更しようとしているので、事後少しです。

次のような抽象メソッドを定義するAbstractProcessorという基本クラスがあります。

abstract class AbstractProcessor {
  def onPush(i:Info): Unit
}

さまざまなonPush動作を実装するために、いくつかの既存の特性があります。

trait Pass1 {
  def onPush(i:Info): Unit = { /* stuff */ }
}

trait Pass2 {
  def onPush(i:Info): Unit = { /* stuff */ }
}

new AbstractProcessor with Pass1だから私はまたはを使用することができますnew AbstractProcessor with Pass2

ここで、AbstractProcessorとPass1およびPass2へのコード変更を最小限に抑えながら、Pass1およびPass2でのonPush呼び出しの前後にいくつかの処理を実行したいと思います。私はこのようなことをする特性を作成することを考えました:

trait Custom extends AbstractProcessor {
  abstract override def onPush(i:Info): Unit = {
    // do stuff before
    super.onPush(i)
    // do stuff after
  }
}

そしてそれを一緒に使用するとnew AbstractProcessor with Pass1 with Custom、そのエラーメッセージが表示されました。

4

2 に答える 2

11

問題は、との間にあいまいさが存在することAbstractProcessor.onPushですPass1.onPush。後者はPass1拡張されないため、前者を上書きしませんAbstractProcessor

を作成Pass1してPass2拡張するとAbstractProcessor、問題は解決します。

于 2010-04-09T00:20:29.307 に答える