gpt4 book ai didi

scala - 在 Scala 中覆盖 val

转载 作者:行者123 更新时间:2023-12-04 23:02:24 25 4
gpt4 key购买 nike

我对以下内容感到困惑:

class A(val s: String) {
def supershow {
println(s)
}
}


class B(override val s: String) extends A("why don't I see this?"){
def show {
println(s)
}
def showSuper {
super.supershow
}
}

object A extends App {
val b = new B("mystring")
b.show
b.showSuper
}

我期待:
mystring
why don't I see this?

但我得到:
mystring
mystring

在 java 中,如果您覆盖或“隐藏”父类(super class)中的变量,则父类(super class)具有自己的变量。但是在这里,即使我认为我使用不同的字符串显式初始化父类,父类也会被设置为与子类相同的值?

最佳答案

scala val类似于 java 中的 getter 方法.您甚至可以覆盖 defval .

如果您需要类似于 java 中的字段的内容你应该使用 private[this] val :

class A(private[this] val s: String) {
def superShow() = println(s)
}
class B(private[this] val s: String) extends A("why don't I see this?") {
def show() = println(s)
}

val b = new B("message")
b.show
// message
b.superShow()
// why don't I see this?

关于scala - 在 Scala 中覆盖 val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19951778/

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