抽象クラスとトレイトのどちらを選択するかについていくつかの議論があったことに気付きましたが、次の点に焦点を当てたものはなかったようです。私が抽象クラスを使用するようになった理由の 1 つは、それらはコンストラクター パラメーターを持つことができますが、トレイトはそれができないことです。しかし、なぜ次の
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」の概念により適合することを認識しています。これらにもかかわらず、どこかで抽象クラスを使用する必要がある理由はありますか? ありがとう!