在案例类中获取父类的属性

问题描述

如果我的案例类继承了这样的另一个

  class Person(name: String) {

  }

case class Male() extends Person("Jack") {
  def f = super.name // Doesn't work 

}

如何从Male类获取name属性

解决方法

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)的,因此nameMale中不可访问。

https://stackoverflow.com/a/62686327/5249621