我知道这个语法不会编译,但我想知道这样的事情是否可能......能够覆盖具有相同名称的val的继承case类中的trait中定义的内容 .
trait A {
def id: Int
def getId: Int = id
}
case class Foo(id: Int, graphId: Int) extends A {
override def id: Int = graphId
}
val f = Foo(1,2)
f.id // => 1
f.getId // => 2
2 回答
您发布的代码实际上几乎是正确的 .
如果您尝试编译它,编译器将提示实际问题:
所以实际问题是case类会自动为所有构造函数参数生成getter方法 .
您可以使用以下代码来编译代码:
我不明白:为什么你两次宣布
id
???case class Foo(id: Int) extends A
或case class Foo(graphId: Int) extends A { def id = graphId }
都可以使用 .