1. ホーム
  2. scala

[解決済み] Abstract ClassとTraitの違い[重複]について

2023-02-16 18:44:56

質問

重複の可能性があります。

Scala の traits と抽象クラス

抽象クラスとtraitの概念的な違いは何ですか?

どのように解決するのですか?

クラスができるのは は一つのスーパークラスを拡張するだけです。 であり,1つの抽象クラスしか拡張できない.もしいくつかのクラスを合成したい場合,Scala の方法では ミキシンクラスコンポジション を使います.(オプションで)スーパークラスと,独自のメンバー定義と,1つ以上の 特性 . trait はクラスと比較して、コンストラクタのパラメータを持つことができないという制約があります (例. scala リファレンスマニュアル ).

クラスと比較した場合のtraitの制限は、多重継承の典型的な問題を回避するために導入されました。継承の階層に関しては多少なりとも複雑なルールがありますが、これが実際に問題となる階層は避けた方が良いかもしれません。) 私の理解では、同じシグネチャを持つ2つのメソッドと同じ名前の2つの変数を2つの異なるtraitから継承する場合のみ問題になります。