Scala:是否可以在子类的构造函数中覆盖 val?

标签 scala overriding

是否可以在子类的构造函数中覆盖 vals 或 defs?我想在子类的构造函数中将 trait 的成员或抽象类的成员初始化(或设置)为 parameters

以下是一个例子。

trait A {
  def memberDef: Int => String
  val memberVal: String
}

class B(
    override val memberDef: Int => String,
    override val memberVal: String)
  extends A {
  ...
}

这里,class BmemberDef 覆盖 trait AmemberDefclass BmemberVal 覆盖 trait AmemberVal

当我编译这个时,没有错误。但是,我想知道这个实现是否有任何错误,或者是否有更好的实现。

最佳答案

我想使用早期初始化器添加另一种可能的解决方案:

class B(memberDefParam: Int => String, memberValParam: String) extends {
  val memberVal: String = memberValParam
} with A {
  val memberDef: Int => String = memberDefParam
}

我会使用它,因为 Martin Odersky 说,如果您使用早期的初始化器,您已经达到了 chalice - L3 级:专家库设计师: http://www.scala-lang.org/old/node/8610

顺便说一句,通过作为构造函数参数提供的函数覆盖公共(public)方法对我来说一点也不好看,但那是另一回事了。

关于Scala:是否可以在子类的构造函数中覆盖 val?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20897043/

相关文章:

java - 从 Java 调用可变长度参数 Scala 函数的语法?

java - Scala 枚举可以像 Java 一样映射到整数吗?

scala - Scala文件是否需要在删除前释放?

没有具体实现的scala Int类抽象def

java - 如何仅覆盖特定方法

scala - 如何在 Futures 中使用 Scala ARM?

java - 对象类、java API

php - 如何覆盖 WordPress 子主题中的小部件?

c# - 编辑接口(interface)时叫什么?

java - 如果视频不播放,如何覆盖发生的情况?