我有一个特征Usertest,我有一个不可变的变量name和一个可变的变量age.在声明我name用空字符串初始化时,我创建了Student一个带有变量name和Student类扩展的构造函数的类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岁
您没有覆盖该name成员,只定义了具有相同名称的类构造函数参数.你应该添加val参数:
class Student(override val name : String)
Run Code Online (Sandbox Code Playgroud)
A case class会默默地为你做这件事.
注意:您的代码还包括Scala中不惯用的其他构造,比如定义getter和setter - 统一访问原则使这变得多余.