如果没有被两者覆盖的第三个成员,则不能覆盖具体成员

huy*_*hjl 9 scala scala-2.8

以下错误消息是什么意思?

如果没有被第二个成员覆盖的第三个成员,则不能覆盖具体成员(此规则旨在防止"意外覆盖");

我试图做可堆叠的特性修改.这是事后的一点点,因为我已经有了一个层次结构,我正在尝试修改行为,而不必重写大量的代码.

我有一个名为AbstractProcessor的基类,它定义了一个类似这样的抽象方法:

abstract class AbstractProcessor {
  def onPush(i:Info): Unit
}
Run Code Online (Sandbox Code Playgroud)

我有几个现有的特征,以实现不同的onPush行为.

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

trait Pass2 {
  def onPush(i:Info): Unit = { /* stuff */ }
}
Run Code Online (Sandbox Code Playgroud)

所以这允许我使用new AbstractProcessor with Pass1new AbstractProcessor with Pass2.

现在我想在Pass1和Pass2中的onPush调用之前和之后进行一些处理,同时最小化对AbstractProcessor和Pass1和Pass2的代码更改.我想创建一个像这样的特性:

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

并使用它,new AbstractProcessor with Pass1 with Custom我收到了错误消息.

Dan*_*ral 11

问题是AbstractProcessor.onPush和之间存在歧义Pass1.onPush.后者并没有覆盖前者,因为Pass1没有延伸AbstractProcessor.

如果你制作Pass1Pass2扩展AbstractProcessor,那么问题就解决了.