多继承

54 阅读1分钟
package level02

/*
特质: trait
实现多继承,注意观察父子类的构造器的执行顺序
1. 先父后子。
2. 有多个父类,按书写顺序从左向右执行!
*/
object Base63 {

  trait A {
    println("A")
  }

  trait BB {
    println("BB")
  }
  trait B extends BB {
    println("B")
  }
  trait CC {
    println("CC")
  }
  trait C extends CC{
    println("C")
  }
    class Class1 extends C with A with B {
      println("Class1")
    }
      def main(args: Array[String]): Unit = {
        new Class1()}
    }

输出结果

image.png

1. 程序入口:main方法执行

当运行main方法时,执行new Class1(),触发Class1类的实例化过程。

2. 特质与父类的初始化顺序

Scala 中,类继承特质时,先初始化特质(按继承顺序从左到右),再初始化当前类,具体步骤:

  • 第一步:初始化第一个特质A,执行println("A"),输出A
  • 第二步:初始化第二个特质B,执行println("B"),输出B
  • 第三步:初始化Class1类本身,执行println("Class1"),输出Class1

核心规则总结

  • 类继承多个特质时,特质按extends/with后的书写顺序从左到右初始化
  • 所有父特质初始化完成后,才会初始化当前类的构造代码。