Scala: "override protected val"在定义案例类构造函数时导致错误

标签 scala overriding protected

我遇到了一些与案例类和 override protected val 相关的奇怪事情。 .

比方说 trait T有一个 protected def (或 val)。

trait T {
  protected def s: String
  def print(): Unit = println(s)
}

我可以覆盖这个方法 def sval s .这里没有问题。
class A(override val s: String) extends T

好的。它编译。但这使得 s public 因为没有 protected 关键字。
class B extends T {
  override protected val s: String = "Show me the money"
}

好的。它编译。 ( sclass B 受到保护)
class C(override protected val s: String) extends T

好的。它编译。 ( sclass C 受到保护)
让我们用 case class 来做这些.
case class D(override val s: String) extends T

好的。它编译。 (虽然 sclass D 是公开的)
case class E() extends T {
  override protected val s: String = "Show me the money"
}

好的。它编译。 ( sclass E 受到保护)
case class F(protected val s: String) extends T

好的。它编译。 ( sclass F 受到保护,而且 s 被覆盖,因为它在 trait T 中不具体。它是抽象的,所以 override 关键字不是必需的。)
case class G(override protected val s: String) extends T

在这里,出现编译错误。error: value s$1 overrides nothing
基本上,class Fclass G是相同的。 class F覆盖 ss受到保护。这可以通过 F("Something").print() 来证明确实会打印Something .override protected val可以在案例类中使用 class E显示。它在定义普通类时没有出错C .

但是,仅定义 class G导致编译错误。

为什么会发生这样的事情?

我正在使用 Scala 2.10.3

最佳答案

此错误将在 Scala 2.11.0-M8 中修复

https://issues.scala-lang.org/browse/SI-8132

关于Scala: "override protected val"在定义案例类构造函数时导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21019966/

相关文章:

scala - 如何将具有 Decimal 的 spark DataFrame 转换为具有相同精度的 BigDecimal 的 Dataset?

java - Scala 图像压缩和优化

javascript - 根据传递的参数覆盖 Javascript 函数

php - protected 静态成员变量

java - 为什么 protected clone()方法无法使用同一包中的继承来访问

scala - 使用隐式推断未知类型

json - Play 2.6中的Joda DateTime格式不起​​作用

python - Django 模型 : How to use mixin class to override django model for function likes save

python - Django 模型 : managing transactions when commit_manually is deprecated

c++ - 如何从其他结构访问 protected 结构变量