Scala中trait(多继承)的学习

25 阅读1分钟

trait的多继承

1.trait:实现多继承

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

(1)先父类后子类

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

3.代码展示:

trait A {
  println("A 特质构造器")
}
trait B {
  println("B 特质构造器")
}
trait C {
  println("C 特质构造器")
}
class Child() extends C with B with A{
  println("child......")
}

def main(args: Array[String]): Unit = {
  val child = new Child()
}

4.结果展示:

Snipaste_2025-11-18_08-26-23.png

5.子类的父类还有父类时的继承顺序

Snipaste_2025-11-18_08-48-21.png

(1)代码展示:

trait AA{
  println("AA 特质构造器")
}
trait A extends AA {
  println("A 构造器")
}
trait B {
  println("B 特质构造器")
}
trait CC {
  println("CC 特质构造器")
}
trait C extends  CC {
  println("C 构造器")
}
class Child() extends C with B with A{
  println("child......")
}

def main(args: Array[String]): Unit = {
  val child = new Child()
}

6.特质的使用(作用)

import java.io.FileWriter
/*
*特质的作用
*/

object csy15 {
  trait FileLogger {
    println("fileLogger")

    val filename:String

    lazy val writer = new FileWriter(filename)
    def writeLog(msg:String) = {
      writer.write(msg)
      writer.close()
    }
  }
  class MyWriter extends FileLogger{
    println("MyWriter")
    override val filename: String = "test1.log"
  }

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

结果展示:

Snipaste_2025-11-18_09-32-21.png

7.class(类) 和 trait(特质) 的区别

1.class 类。伴生类,抽象类,内部类。不能多继承 2.trait 特质。可以多继承。构造器不能带参数

共同点 1.都有:具体属性,抽象属性,具体方法,抽象方法 2.都使用extends来做继承