【发布时间】:2012-11-18 18:41:12
【问题描述】:
我有这个具体的类:
class Person (var name: String, var surname: String)
我想创建另一个扩展 Person 的类:
class Son (name: String, surname: String) extends Person(name, surname)
好的。 但我确实希望 Son 的构造函数中的字段必须是 var 而不是 val。 我该如何解决?字段必须保留构造函数参数。
更新 #2
我的问题如下: 如果我在 Son 中定义一个方法,如果我将值更改为 Son 实例的参数,这将不起作用。
class Son (name: String, surname: String) extends Person(name, surname){
def printSon = {
if(this.name=="name")println("Error name Person")
if(this.surname=="surname")println("Error surname Person")
}
}
object main {
def main(args: Array[String]): Unit = {}
val Marco = new Son("Marco","Bianchi")
Marco.printSon // So far everything is ok
Marco.name="name"
Marco.printSon // Here in control is not done, because Marco.name="name" writes in Person
println("FINE")
}
Son 中的姓名和姓氏属于 val 类型。
【问题讨论】:
-
Son中的字段已经是可变的。你的意思可能是相反的吗?或者你真正想要达到的目标是什么? -
嗨,我在更新 #2 中回答了你
-
我看不到你试图隐藏 Person 构造函数的参数会得到什么。如果您将 Person 更改为 trait,那么您只有 Son 和 Person 并且您可以访问它的字段
标签: scala parameters constructor extend