9.3.5 叠加特质
构建对象的同时如果混入多个特质,称之为
package com.atguigu.day06
object OverflowTrait {
def main(args: Array[String]): Unit = {
val test = new Test with A with B with C
test.foo()
}
}
class Test{
}
trait Father{
def foo(): Unit ={
println("Father...")
}
}
trait A extends Father{
override def foo(): Unit = {
println("A...")
super.foo()
}
}
trait B extends Father{
override def foo(): Unit = {
println("B...")
super.foo()
}
}
trait C extends Father{
override def foo(): Unit = {
println("C...")
super.foo()
}
}
说明:
当构建一个混入对象时,构建顺序和声明的顺序一致(从左到右),机制和类的继承一致. 所以对象中的
foo
方法一定是最后一个特质的方法.super.foo()
这里super
并不会直接去找父特质, 而是按照顺序去找上一个特质.如果不想按照顺序向上找, 可以直接指定该特质的直接父特质
super[Father].foo()