【问题标题】:Call an abstract super method in Scala在 Scala 中调用抽象的超级方法
【发布时间】:2015-09-22 11:34:48
【问题描述】:

我希望能够像这样调用超类的抽象方法

trait B { def x: Int }
trait D extends B { def y = super.x }

但是,这不起作用。即使是 abstract override 修饰符也无济于事。

在 scala 中可以做到这一点吗?如果不是,是什么原因?

我知道当我在特征 D 中覆盖方法 x 时这有效,但方法 y 是否可行?

【问题讨论】:

  • 只需从D 调用x

标签: scala


【解决方案1】:

如果你有这样的定义

trait B { def x: Int }

然后方法 x 没有实现,这就是它不起作用的原因。

trait D extends B { def y = super.x }

你尝试在这里调用一些没有实现的东西,但是如果你想引用特定的超类,你可以这样做:

    trait C { def x : Int = 42 }
    trait D extends C { def y : Int = super[C].x }

C 现在指定作为调用目标的超类,如果不指定,调用将按 D 的线性化顺序调度。

【讨论】:

    【解决方案2】:

    你不能调用未实现的方法,但是在这种情况下你可以在没有 super 的情况下调用 x:

    trait B { def x: Int }
    trait D extends B { def y = x }
    

    为了理解原因,您可以阅读 scala 中的线性化。

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2012-01-14
      • 2012-04-05
      • 1970-01-01
      • 2017-05-02
      相关资源
      最近更新 更多