问题描述
如果我的案例类继承了这样的另一个类
class Person(name: String) {
}
case class Male() extends Person("Jack") {
def f = super.name // Doesn't work
}
解决方法
class Person(name: String) {
在此声明中,name
不是类的字段,它只是构造函数参数。因此可以在构造函数内部访问,但不能在外部(包括子类中)访问。您可以将其设置为val
:
class Person(val name: String) {
令人困惑的是,case class
的构造函数参数也是,即使没有val
尝试在name
中将val
设为protected val
(或至少Person
),然后在Male
中将其访问
class Person(val name: String)
case class Male() extends Person("Jack") {
def f = name
}
当您编写class Person(name: String)
时,您实际上是创建class Person(private[this] val name: String)
的,因此name
在Male
中不可访问。