9

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

不能覆盖没有被两者覆盖的第三个成员的具体成员(此规则旨在防止“意外覆盖”);

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

我有一个名为 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 Pass1or new 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
  }
}

并与它一起使用new AbstractProcessor with Pass1 with Custom,我收到了该错误消息。

4

2 回答 2

11

AbstractProcessor.onPush问题是和之间存在歧义Pass1.onPush。后者不会覆盖前者,因为Pass1它不扩展AbstractProcessor

如果你 makePass1Pass2extend AbstractProcessor,那么问题就解决了。

于 2010-04-09T00:20:29.307 回答
0

另一种解决方案是拥有一个仅包含以下内容的特征:

def onPush(i:Info): Unit

并将该特征混合到AbstractProcessor,Pass1Pass2中。编译器将不再试图阻止“意外覆盖”。

于 2015-05-21T00:01:26.253 回答