by shigemk2

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

Scalaにおける複数トレイト使用時のコンストラクタの順序

概要

複数のトレイトを使用した場合、コンストラクタが実行される順番は、 スーパークラスのコンストラクタのあとに自分自身のコンストラクタが呼ばれて その後ミックスインしている。

コード

parant.scala

class Parent {
  println("Parent")
}

class Child extends Parent {
  println("Child")
}

trait A { println("trait A") }
trait B { println("trait B") }
trait C { println("trait C") }

object Parent {
  def main(args: Array[String]) {
    val c = new Child with A with B with C
    // println(c)
  }
}

コマンド

$ scalac parent.scala
$ scala Parent
Parent
Child
trait A
trait B
trait C