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()

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-07-02 08:12:45

results matching ""

    No results matching ""