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()}
}
输出结果
1. 程序入口:main方法执行
当运行main方法时,执行new Class1(),触发Class1类的实例化过程。
2. 特质与父类的初始化顺序
Scala 中,类继承特质时,先初始化特质(按继承顺序从左到右),再初始化当前类,具体步骤:
- 第一步:初始化第一个特质
A,执行println("A"),输出A。 - 第二步:初始化第二个特质
B,执行println("B"),输出B。 - 第三步:初始化
Class1类本身,执行println("Class1"),输出Class1。
核心规则总结
- 类继承多个特质时,特质按
extends/with后的书写顺序从左到右初始化。 - 所有父特质初始化完成后,才会初始化当前类的构造代码。