我正在学习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
}
}
Run Code Online (Sandbox Code Playgroud)
然后我运行我得到与每次调用相同的返回结果.我理解这一行
new Person("Tek Tuk").fullName
Run Code Online (Sandbox Code Playgroud)
不应该编译,任何人都可以解释为什么这行得到编译并返回与第一行相同的结果?
谢谢.
如果你问为什么你被允许访问fullName
你的Person
类的字段,那是因为你已经val
在参数列表中声明它.
这与public final
在Java中声明它是一个字段相同.如果你想要它是私人的,只需删除val
部分,即
class Person(fullName: String) {
(...)
}
Run Code Online (Sandbox Code Playgroud)
至于为什么两个叫"返回"同样的事情 - 他们没有.
new Person("Tek Tuk")
返回一个实例Person
.new Person("Tek Tuk").fullName
返回"Tek Tuk"
- a String
.您创建了另一个Person
具有相同的实例fullName
并且您对其进行了调用fullName
.但是,两者都打印"This is the primary constructor. Name is Tek Tuk"
,因为在两种情况下都调用了相同的构造函数,并且您println
在构造函数中打印了它.