【发布时间】:2022-01-17 05:40:05
【问题描述】:
我定义了一个 Trait Box 和两个继承自 Box 的案例类 RedBox 和 BlueBox。我系统的那部分工作正常。现在,我想创建一个新的元素层次结构,以便可以通过这种方式将具有可变属性位置的基本元素 Token 扩展到特定类型的 Box:
abstract class Token {
var position: Box
}
class RedToken(position: RedBox, val marked: Boolean) extends Token {
def test() = {
position = RedBox()
}
}
我需要 position 属性是可变的,但编译器正在向我抛出“重新分配给 val”。然后,如果我修改构造函数签名以强制 var:
class RedToken(var position: RedBox, val marked: Boolean) extends Token {
}
...我得到“类 RedToken 需要是抽象的,因为未定义 Box 类型的类 Token 中的变量位置”。我无法理解发生了什么,我可以帮忙吗?谢谢
【问题讨论】:
-
具有公共
var的抽象类不太可能是一个好主意。子类如何知道它们的状态何时发生变化?
标签: scala oop inheritance constructor