by shigemk2

当面は技術的なことしか書かない

Scalaで別のトレイトで両方とも同じ名前のメソッドを実装していたら

概要

複数実装したトレイトの名前(シグネチャ)が同じ場合、
これらをまとめてミックスインしたらエラーになるので、
そのメソッドは必ずオーバーライドする必要がある。

コード

trait Programmer {
  def write = println("コードを書きます")
}

trait Writer {
  def write = println("記事を書きます")
}

// このまま書くとerror: class Person inherits conflicting members:とかなる
// class Person extends Programmer with Writer
class Person extends Programmer with Writer {
  // なのでwriteメソッドをオーバーライドする必要がある
  override def write = println("ドキュメントを書きます")
}


object Write {
  def main(args: Array[String]) {
    var p = new Person
    println(p)
    println(p.write)
  }
}