trait是一个与继承有关系的一项代码方法,它具有自己的执行特质与执行顺序 内容如下:
特质:
trait 实现多继承
trait多继承构造器的执行顺序
1. 先父 后子
* 2. 如果是多继承, 有多个trait, 按书写顺序从左到右
可以输入以下代码:
package level02
/*
特质:
trait 实现多继承
trait多继承构造器的执行顺序
1. 先父 后子
* 2. 如果是多继承, 有多个trait, 按书写顺序从左到右
*/
object class17 {
trait A {
println("A 特质构造器")
}
trait B {
println("B 特质构造器")
}
trait C {
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多继承构造器的执行顺序
1. 先父 后子
* 2. 如果是多继承, 有多个trait, 按书写顺序从左到右
*/
object class18 {
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 ...")
} // 继承 三个特质A,B,C
def main(args: Array[String]): Unit = {
val child = new Child()
}
}
运行结果如图所示:
还可以输入以下代码:
package level02
import java.io.FileWriter
/*
*
*/
object class19 {
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("MyWriter")
override val filename: String = "test.log"
} // 继承 三个特质A,B,C
def main(args: Array[String]): Unit = {
val log = new MyWriter()
log.writeLog("测试内容")
}
}