trait2

23 阅读1分钟

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

特质

trait: 实现多继承

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

1:先父 后子

2:如果是多继承,有多个trait,按书写书序从左到右

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

 trait A extends  AA{
   println("A  构造器")
 }

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

 trait CC {
   println("C特质构造器")
 }
 trait C extends CC{
   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()
 }
}

二:多层trait的加载顺序

trait FileLogger {

    println("filelogger")
    val filename: String
    // 懒加载效果
    // 这个对象不会立刻去创建,而是等到你需要使用的时候去创建
    lazy val  writer = new FileWriter(filename)
    def writeLog(msg: String): Unit = {
      writer.write(msg)
      writer.close()
    }
  }

  class MyWriter extends FileLogger {
    println("Mymriter")
    override val filename: String = "test.log"
  }

  def main(args: Array[String]): Unit = {
    val log = new MyWriter()
    log.writeLog("测试内容")
  }
}

三: trait和class的区别

1: class 类。伴生类,抽象类,内部类,不能多继承

2: trait 特质 可以多继承,构造器不能带参数。 extends with

共同点

1: 都可以有: 具体属性 抽象属性 具体方法 抽象方法 2: 都使用exten来做继承 */

case object class14 {
 
 class A{}
 trait B{}
 
 class AB extends  A with  B{
   
 }

 def main(args: Array[String]): Unit = {
  
 }
}