如何在Scala中访问被覆盖的数据成员?

时间:2015-09-15 04:55:22

标签: scala inheritance

如何在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如何在仍然可以访问数据成员的情况下覆盖数据成员?有一些解决方法,例如:

  1. 不覆盖超类值
  2. 将超类值声明为方法
  3. 但我很好奇我是否可以使用我的覆盖我的超类数据成员访问。

    谢谢!

2 个答案:

答案 0 :(得分:6)

正如编译器告诉你的那样,scala不允许在super上使用val。 如果需要,可以重构代码以使用用于初始化def的{​​{1}}。然后,您可以改为覆盖val

def

答案 1 :(得分:2)

不,这根本不可能。