我对以下内容感到困惑:
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中,如果你覆盖超级类中的变量或“影子”变量,那么超类就有自己的变量.但是在这里,即使我认为我使用不同的字符串显式初始化父级,父级也会设置为与子类相同的值?
解决方法
在scala中,val类似于java中的getter方法.你甚至可以用val覆盖def.
如果你需要类似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?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。