gpt4 book ai didi

scala - 当您重写方法时,Scala 类中的指令顺序如何工作

转载 作者:行者123 更新时间:2023-12-02 18:40:58 25 4
gpt4 key购买 nike

我正在第一次体验 Scala,尝试基本概念。我创建了一个非常简单的类,通过覆盖 toString 进行恶作剧,以便在创建时打印类实例:

class Person(var firstName: String, var lastName: String) {
println(this)
override def toString: String = "Overriden toString"
println(this)
}
val p = new Person("John", "Smith")

我想知道如果我运行这段代码会发生什么。在覆盖 toString 之前的第一个 println 应该是

PlatformName$Person@address

如果我理解正确的话,这就是在不覆盖 toString 的情况下打印类实例时应该得到的结果。但相反,这两种打印品都打印在建筑上

Overriden toString.

为什么会这样呢? override 是否比任何其他代码具有第一优先级(忽略顺序),或者它是如何工作的?

最佳答案

当你定义这样一个类时,你基本上写的是同样的东西:

class Person {

var firstName: String
var lastName: String

// Constructor
def this(firstName: String, lastName: String) = {
// Regular constructor member definition
this.firstName = firstName
this.lastName = lastName
// The code you wrote in the class body
println(this)
println(this)
}

override def toString: String = "Overriden toString"
}

类中编写的不属于 def 的代码将在创建该类的实例时执行(在运行时的构造函数中) .

类的 def 都是在实例化类之前定义的(在编译时),无论顺序或覆盖

关于scala - 当您重写方法时,Scala 类中的指令顺序如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68032483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com