object Main {
trait A {
println("A 特质构造器")
}
trait B {
println("B 特质构造器")
}
trait C {
println("C 特质构造器")
}
class Child() extends C with B with A{
println("child ...")
} // 继承 三个特质A,B,C
def main(args: Array[String]): Unit = {
val child = new Child()
}
}
1. 特质定义
- 定义了三个特质
A、B、C,每个特质构造时都会打印相应的构造器信息
2. 继承顺序
scala
class Child() extends C with B with A
继承顺序:C → B → A
3. 执行结果
当创建 Child 实例时,构造器执行顺序为:
text
C 特质构造器
B 特质构造器
A 特质构造器
child ...
-
先父后子:特质构造器先执行,类构造器后执行
-
从左到右:多个特质按
extends...with...with...的书写顺序执行- 第一个特质用
extends - 后续特质用
with连接 - 执行顺序就是书写顺序
- 第一个特质用
重要结论
- 特质构造器执行顺序严格按照继承列表的从左到右顺序
- 与特质定义的先后顺序无关
- 这个顺序在 Scala 线性化算法中很重要