如何在Scala中调用被覆盖的数据成员?这是工作表中的一个示例 - 我想做类似的事情:
trait HasWings {
def fly() = println("I'm flying!")
val wingType = "Thin"
}
class Bee extends HasWings {
override def fly() = {
println("Buzzzz! Also... ")
super.fly() // we can do this...
}
override val wingType = "Translucent and " + super.wingType // ...but not this!
}
val bumble = new Bee()
bumble.fly()
println(s"${bumble.wingType}")
但我收到错误super may not be used on value wingType
。 如何在仍然可以访问数据成员的情况下覆盖数据成员?有一些解决方法,例如:
但我很好奇我是否可以使用我的覆盖和我的超类数据成员访问。
谢谢!
答案 0 :(得分:6)
正如编译器告诉你的那样,scala不允许在super
上使用val
。
如果需要,可以重构代码以使用用于初始化def
的{{1}}。然后,您可以改为覆盖val
:
def
答案 1 :(得分:2)
不,这根本不可能。