【发布时间】:2017-02-26 17:11:09
【问题描述】:
我有一个抽象基类 Foo,我希望它的构造函数有一个可选参数。如果没有提供,我就给它一个None 值。
源 Foo 不会有父母,所以我只想在没有父母列表的情况下构造它们(保留父列表的默认值)
派生的 Foo 可能提供了父母,所以我想模仿 Foo 基类的签名。
以下是我的尝试:
abstract class Foo(val id: String, var parentIds: Option[List[String]]=None) { }
case class SourceFoo(override val id: String)
extends Foo(id, parentIds=None) { }
case class DerivedFoo(override val id: String,
override var parentIds: Option[List[String]])
extends Foo(id, parentIds) { }
我收到一个无法覆盖可变变量的编译器错误(在 DerivedFoo 构造函数中引用 parentIds。
此列表可能会更改,因此我不想将其设为 val(这消除了我的编译器问题)。
这是一个非常基本的 OO 问题,所以它一定比我想象的要简单。如何以惯用的方式实现我想要的行为?
【问题讨论】:
标签: scala oop abstract-class case-class