我注意到有几个关于如何在抽象类和特征之间进行选择的讨论,但似乎没有一个集中在以下点上。让我使用抽象类的一个原因是,它们可以有构造函数参数,而特征不能。但为什么不是以下
trait X {
def haha: Int
}
class Y(val haha: Int) extends X
甚至不需要早期定义来让一切正常工作(我担心)。抽象类版本是
abstract class X(haha: Int)
class Y(val haha: Int) extends X(haha)
而且我不喜欢抽象类版本,因为当您多次扩展时,这些构造函数参数无处不在(也许有人告诉我如何避免这种情况?)。
我知道抽象类可以更好地使用 Java 进行插值,并且更符合“is-a”概念。尽管如此,有什么理由我应该在某处使用抽象类吗?谢谢!