23.多继承

16 阅读1分钟

实现多继承。注意观察父子类的构造器的执行顺序

1.先父后子

2.有多个父类,按书写顺序从左向右执行!

trait A {
  println("A")
}
trait B {
  println("B")
}

class Class1 extends A with B {
  println("Class1")
}

def main(args: Array[String]): Unit = {
  new Class1()
}
有一种继承叫做你看着很多很晕的继承:
trait A {
  println("A")
}
trait BB {
  println("BB")
}
trait B extends BB{
  println("B")
}
trait CC {
  println("CC")
}
trait C extends CC{
  println("C")
}
class Class1 extends C with A with B {
  println("Class1")
}

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

演示一个程序错误:

着重于lazy

trait FileLogger {
  val filename:String
  lazy val fileWriter = new FileWriter(filename,true)
  def writeLog(msg:String):Unit = {
    fileWriter.write(msg)
    fileWriter.close()
  }
}
class MyFileLogger extends FileLogger {
  val filename = "11-26.log"
}

def main(args: Array[String]): Unit = {
  val fileLogger = new MyFileLogger()
  fileLogger.writeLog("今天上午上Scala课程")
}               当少了lazy将会报错