Nae*_*mul 6 overriding scala protected
我遇到了一些与案例类相关的奇怪事情override protected val.
假设trait T有一个受保护的def(或val).
trait T {
protected def s: String
def print(): Unit = println(s)
}
Run Code Online (Sandbox Code Playgroud)
我可以覆盖此方法def s有val s.这里没有问题.
class A(override val s: String) extends T
Run Code Online (Sandbox Code Playgroud)
好.它汇编.但这是s公开的,因为没有受保护的关键字.
class B extends T {
override protected val s: String = "Show me the money"
}
Run Code Online (Sandbox Code Playgroud)
好.它汇编.(s的class B保护)
class C(override protected val s: String) extends T
Run Code Online (Sandbox Code Playgroud)
好.它汇编.(s的class C保护)让我们做这些用case class.
case class D(override val s: String) extends T
Run Code Online (Sandbox Code Playgroud)
好.它汇编.(尽管s的class D是公共的)
case class E() extends T {
override protected val s: String = "Show me the money"
}
Run Code Online (Sandbox Code Playgroud)
好.它汇编.(s的class E保护)
case class F(protected val s: String) extends T
Run Code Online (Sandbox Code Playgroud)
好.它汇编.(s中class F受到保护,并且也s被重写,因为它是不是在混凝土中trait T,这是抽象的,所以override关键词是没有必要的.)
case class G(override protected val s: String) extends T
Run Code Online (Sandbox Code Playgroud)
在这里,出现编译错误.
error: value s$1 overrides nothing
基本上class F和class G都是一样的.class F覆盖s并s受到保护.这可以通过F("Something").print()确实打印来显示Something.
override protected val可以在案例类中用作class E节目.它在定义普通类时没有出错C.
但是,仅class G在编译错误中定义结果.
为什么会发生这件事?
我正在使用Scala 2.10.3
| 归档时间: |
|
| 查看次数: |
893 次 |
| 最近记录: |