Scala線形化規則とsuper操作

958 ワード

1つのクラスに複数の親があり、親クラスに同じ関数fがある場合、サブクラスと親クラスでsuperを呼び出す.fはいずれも右から左への呼び出し関数の順序である.このルールの名前はLinearization Rulesです
次のコード
trait Base1 {
  def print() { println("Base1") }
}
trait A extends Base1 {
  override def print() { println("A"); super.print() }
}
trait B extends Base1 {
  override def print() { println("B"); super.print() }
}
class Base2 {
  def print() { println("Base2") }
}
trait Base3 {
  def print() { println("Base3") }
}
class C extends Base2 with Base3 with A with B {
  override def print() { println("C"); super.print() }
}
object Main extends App {
  (new C).print()
}

継承順はC->Base 2,Base 3,Base 1,A,B,出力結果は次のとおりです.
C B A Base1
class Cが次のようになった場合:
class C extends Base2 with A with Base3 with B {
  override def print() { println("C"); super.print() }
}

継承順はC->Base 2、Base 1、A、Base 3、B、出力結果は次のとおりです.
C B Base3