是否有可能在子类的构造函数中覆盖vals或defs?我想在子类的构造函数中初始化(或设置)trait的成员或抽象类的成员作为参数.
以下是一个例子.
trait A {
def memberDef: Int => String
val memberVal: String
}
class B(
override val memberDef: Int => String,
override val memberVal: String)
extends A {
...
}
在这里,class B的memberDef覆盖trait A的memberDef,和class B的memberVal替代trait A的memberVal.
当我编译它时,没有错误.但是,我想知道这个实现中是否有任何错误,或者是否有更好的实现.
我想使用早期初始化器添加一个可能的解决方案:
class B(memberDefParam: Int => String, memberValParam: String) extends {
val memberVal: String = memberValParam
} with A {
val memberDef: Int => String = memberDefParam
}
Run Code Online (Sandbox Code Playgroud)
我会用这个,因为Martin Odersky说如果你使用早期的初始化程序就可以获得圣杯--L3级:专家库设计师:http: //www.scala-lang.org/old/node/8610
顺便说一下,通过作为构造函数参数提供的函数覆盖公共方法对我来说看起来并不好看,但这是另一个故事.
| 归档时间: |
|
| 查看次数: |
3530 次 |
| 最近记录: |