1. ホーム
  2. scala

[解決済み] 抽象クラスよりtraitを使うことの利点は何ですか?

2023-06-27 01:04:24

質問

どなたかScalaのtraitについて説明していただけませんか?抽象的なクラスを拡張するよりもtraitの方が優れている点は何ですか?

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

簡単に言うと、複数のtraitを使用することができます。また、traitはコンストラクタのパラメータを持つことができません。

traitsがどのように積み重ねられるかを示します。traitsの順序が重要であることに注意してください。右から左へお互いを呼び出すことになります。

class Ball {
  def properties(): List[String] = List()
  override def toString() = "It's a" +
    properties.mkString(" ", ", ", " ") +
    "ball"
}

trait Red extends Ball {
  override def properties() = super.properties ::: List("red")
}

trait Shiny extends Ball {
  override def properties() = super.properties ::: List("shiny")
}

object Balls {
  def main(args: Array[String]) {
    val myBall = new Ball with Shiny with Red
    println(myBall) // It's a shiny, red ball
  }
}