Scala

19 阅读1分钟
  • 特质:trait
  • 作用:类似于抽象类 定义抽象属性 方法让其他的子类去实现
  • 特点:可以实现多继承类
  • 多继承时构造器调用顺序
  1. 先父后子 先调用父类构造器 再调用子类构造器
  2. 有多个父类 从左到右的顺序去调用构造器
package level02


object class21{
  trait A {
    println("trait A")
  }
  trait B {
    println("trait B")
  }
  trait C {
    println("trait C")
  }
  class Class1 extends B with  A with C{
    println("class1...")
  }



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


  }
}
  • trait 和抽象类class的区别
  • 相同点
  1. 可以被继承 extends
  2. 属性和方法:抽象属性 具体属性 抽象方法 具体方法
  3. 都不能被实例化 不能new
  • 不同点
  1. trait 支持多继承 抽象类不能多继承

package level02

import java.io.FileWriter
//实现日志类 可以把一些文本信息写入指定的文件中
object class23{
  trait  Log {
    //抽象属性 文件名
    var fileName:String

    println(s"${fileName}")
    //具体属性
    //lazy
    lazy val fileWriter:FileWriter = new FileWriter(fileName)


    def writeLog(msg:String):Unit ={
      fileWriter.write(msg)
      fileWriter.close()
    }
  }
  //先执行父类构造器 所以报错
  class TextLog extends Log{
     var fileName: String = "text02.log"
  }




  def main(args: Array[String]): Unit = {
    val textLog = new TextLog()
    textLog.writeLog("2015-11-19:下午天气晴朗")


  }
}