多个trait的加载顺序
一个类实现了多个特质之后,所涉及的多个构造器的执行顺序如何确定?
如果有多个父类,则按照从左到右的顺序调用
package txy
object Demo17 {
def main(args: Array[String]): Unit = {
trait A {
println("A")
}
trait B {
println("B")
}
class Trait extends A with B {
println("C")
}
new Trait
}
}
先父后子,父类从左到右
package txy
object Demo17 {
def main(args: Array[String]): Unit = {
trait A {
println("A")
}
trait B {
println("B")
}
trait C extends B {
println("C")
}
class Trait extends C with A {
println("D")
}
new Trait
}
}
懒加载:赋值时不加载,等到调用时才加载
应用场景:
package txy
import java.io.FileWriter
object Demo18 {
trait FileLogger {
val filename:String
//val filewriter =new FileWriter(filename,true)
lazy val filewriter =new FileWriter(filename,true)
def writeLog(msg:String): Unit = {
filewriter.write(msg)
filewriter.close()
}
}
class MyFileLogger extends FileLogger{
override val filename = "11-26.log"
}
def main(args: Array[String]): Unit = {
val filelogger = new MyFileLogger()
filelogger.writeLog("上午上scala课程")
}
}