scala - 在 Scala 中覆盖 val

标签 scala polymorphism overriding

我试图在 Scala 中重写 val,如下所示:

trait T{
  val str: String
}

sealed abstract class Test extends T{
  val str: String = "str"
}

class Test1 extends Test{
  val str = super.str + "test1" //super may not be used on value str
}

但这拒绝编译。为什么?我想使用抽象类的值本身覆盖抽象类中的值。如何做到这一点?

在我的特殊情况下,我不能将它作为类参数传递。

最佳答案

Scala 编译器不允许在 val 上使用 super。如果您不关心重新评估,则可以使用 def 代替。

trait T{
  def str: String
}

sealed abstract class Test extends T{
  def str: String = "str"
}

class Test1 extends Test{
  def str = super.str + "test1" //super may not be used on value str
}

defined trait T
defined class Test
defined class Test1

关于scala - 在 Scala 中覆盖 val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39309321/

相关文章:

scala:类似 python/ruby 开发模式吗?

scala - Scalaz 的 Reader Monad

ruby-on-rails - 多态模型、Forms 和 AssociationTypeMismatch

java - 重写而不调用父方法,违反了里氏原则

java - 如何更新/删除 Spark-hive 中的数据?

java - Java 中的同步构造是否在内部(以某种方式)使用硬件原语 CAS 操作?

c++ - 访问由指向其基类的指针指向的派生类对象的成员变量

java - Scala 类 Final def this() 声明没有公共(public)无参构造函数

azure - 在 Azure Webjob 中,使用 CustomQueueProcessorFactory 时,即使调用 DeleteMessageAsync 后消息也会返回到队列

Android:在 XML 中覆盖自己的 XML View