我正在学习scala,我尝试使用以下代码。
object Demo7 {
def main(args: Array[String]): Unit = {
class Person(val fullName: String) {
println(s"This is the primary constructor. Name is ${fullName}")
val initial = fullName.substring(0, 1) // Computed during initialization
//def this(firstName: String, lastName: String) = this(s"$firstName $lastName")
}
new Person("Tek Tuk")
new Person("Tek Tuk").fullName
}
}
然后我运行我得到与每次调用相同的返回结果。 我理解这一行
new Person("Tek Tuk").fullName
不应该编译,任何人都可以解释为什么这行得到编译并返回与第一行相同的结果?
谢谢。
答案 0 :(得分:5)
如果您问为什么您可以访问fullName
课程的Person
字段,那是因为您已将其声明为参数列表中的val
。
这与在Java中声明它为public final
字段相同。如果您希望它是私有的,只需删除val
部分,即
class Person(fullName: String) {
(...)
}
至于为什么两个电话"返回"同样的事情 - 他们不会。
new Person("Tek Tuk")
返回Person
的实例。 new Person("Tek Tuk").fullName
返回"Tek Tuk"
- String
。您使用相同的Person
创建了另一个fullName
实例,并在其上调用了fullName
。但是,两者都打印"This is the primary constructor. Name is Tek Tuk"
,因为在这两种情况下都调用了相同的构造函数,并且您有println
在构造函数中打印它。