trait多维继承构造器的执行顺序

33 阅读1分钟
/*
    特质
    trait: 实现多继承
    trait多维继承构造器的执行顺序
    1.先父 后子
    2.如果是多继承,有多个trait,按书写顺序从左到右
 */

  trait AA {
    println("AA 特质构造器")
  }

  trait A {
    println("A 特质构造器")
  }

  trait B {
    println("B 特质构造器")
  }

  trait CC {
    println("CC 特质构造器")
  }

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

image.png

import java.io.FileWriter
/*  
 */
  
  trait FileLogger {
    
    println("fileLogger")
    
    val filename:String
    
    // 懒加频效果
    // 这个对象不会立刻去创建,而是等你需要使用的时候才去创建
    
     
    lazy val write = new FileWriter(filename)
    
    def writeLog(msg:String) = {
      write.write(msg)
      write.close()
    }
  }
  
  class MyWriter extends  FileLogger   {
    
    println("MyWrite")
    
    override val filename: String = "test.log"
  }  // 继承 三个特质A,B,C
  
  def main(args: Array[String]): Unit = {
    val log = new MyWriter()
    log.writeLog("测试内容")
  }