我的scala特征是这样的:
trait A {
def foo()
val val1:Set[Set1]
}
我有一个扩展这个特性的类。像这样:
class B extends A {
override val val1 = //Something
override def foo() {
//change Something here
}
}
有可能这样做吗?
答案 0 :(得分:4)
继承与"更改"无关。瓦尔斯。首先,你无法重新启动val:
class B {
val val1 = Set("Something")
def foo(): Unit = {
val1 = Set("Some other thing") // reassigning val1; will not compile
}
}
val
表示不可变变量,因此您无法更改这些变量包含的内容。
但是,如果它们的类型支持,您可以更改这些变量。例如,如果我们使val1
成为可变集,然后尝试在方法中修改此集:
import scala.collection.mutable
class B {
val val1 = mutable.Set("Something")
def foo(): Unit = {
val1 += "Another thing"
}
}
然后它会正常工作。
答案 1 :(得分:0)
除非您要更改方法val1
中的值foo
,否则就是如何覆盖val和defs。
您可以使用defs
覆盖vals
和vals
,但无法使用vals
覆盖defs
trait A {
val a:Int
}
class B extends A {
def a = 5 //Compilation error
}