在Scala中更改不可变变量

M.A*_*aqi 0 overriding scala

我有一个特征Usertest,我有一个不可变的变量name和一个可变的变量age.在声明我name用空字符串初始化时,我创建了Student一个带有变量nameStudent类扩展的构造函数的类Usertest.

现在我想在每次创建实例时更改name的值,Student但我不知道该怎么做.

我试过这样的:

trait Usertest {
  val name: String = ""
  var age: Int= 12

  def setage(setage: Int) = {
    age = setage
  }

   def getAge :Int = age
   def getName : String = name

}

class Student(name : String) extends Usertest

object Main extends App {
  val st = new Student("ahsen")
  var age = st.setage(23)
  println("name  : " st.name)
  println("age : "+ st.getAge)

}
Run Code Online (Sandbox Code Playgroud)

它在控制台上提供此输出:

名称 :

年龄:23​​岁

Sum*_*uma 8

您没有覆盖该name成员,只定义了具有相同名称的类构造函数参数.你应该添加val参数:

class Student(override val name : String)
Run Code Online (Sandbox Code Playgroud)

A case class会默默地为你做这件事.

注意:您的代码还包括Scala中不惯用的其他构造,比如定义getter和setter - 统一访问原则使这变得多余.