所以。假设我们有一个特质 Animal
trait Animal {
val typeAnimal: String
val name: String
}
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个class Dog,以扩展此特征。但是我想使用Companion对象将typeAnimal覆盖为Mammal,而不是在Dog类本身上进行。就像是
class Dog(override val name: String) extends Animal
object Dog {
override val typeAnimal = "Mammal"
}
Run Code Online (Sandbox Code Playgroud)
这行不通。它对我说了一个错误:
可能吗?我要达到的目标有意义吗?
编辑 我假设按照Jorg的评论无法实现我正在尝试的内容。
我正在尝试做的是:一个特征定义static每个类都应实现的一些值,例如typeAnimal,并且由于它属于实现该特征的每个类的所有实例(例如,狗是哺乳动物,所以我不看看为什么typeAnimal应该是实例变量而不是静态变量的任何原因)我想在伴随对象中覆盖
如果您想typeAnimal成为“静态”,则它不应该是特征本身的成员。您可以改为:
trait Animal {
val name: String
def companion: AnimalCompanion
// optional: def typeAnimal = companion.typeAnimal
}
trait AnimalCompanion {
val typeAnimal: String
}
class Dog(override val name: String) extends Animal {
override def companion = Dog
}
object Dog extends AnimalCompanion {
override val typeAnimal = "Mammal"
}
Run Code Online (Sandbox Code Playgroud)
标准库通过collection来做到这一点。
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |