继承顺序

35 阅读1分钟
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. 特质定义

  • 定义了三个特质 ABC,每个特质构造时都会打印相应的构造器信息

2. 继承顺序

scala

class Child() extends C with B with A

继承顺序:C → B → A

3. 执行结果

当创建 Child 实例时,构造器执行顺序为:

text

C 特质构造器
B 特质构造器  
A 特质构造器
child ...
  1. 先父后子:特质构造器先执行,类构造器后执行

  2. 从左到右:多个特质按 extends...with...with... 的书写顺序执行

    • 第一个特质用 extends
    • 后续特质用 with 连接
    • 执行顺序就是书写顺序

重要结论

  • 特质构造器执行顺序严格按照继承列表的从左到右顺序
  • 与特质定义的先后顺序无关
  • 这个顺序在 Scala 线性化算法中很重要