最终方法不能在子类中覆盖。但是借助Scala的魔力,似乎这是可能的。

考虑以下示例:

trait Test {
  final def doIt(s: String): String = s
}

object TestObject extends Test {
  def doIt: String => String = s => s.reverse
}


对象doIt中的方法TestObject与特征doIt中的Test具有不同的签名。因此doIt被重载而不是被覆盖。但是,对doIt的常规调用始终会调用TestObject中的方法:

val x = TestObject.doIt("Hello")                //> x  : String = olleH


题:
如何在doIt上调用原始方法TestObject。这可能吗,还是该方法“被覆盖”?

最佳答案

您可以像这样将TestObject用作Test

(TestObject: Test).doIt

关于scala - 覆盖 final方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20453243/

10-12 23:03