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.结果展示:
5.子类的父类还有父类时的继承顺序
(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("测试内容")
}
结果展示:
7.class(类) 和 trait(特质) 的区别
1.class 类。伴生类,抽象类,内部类。不能多继承 2.trait 特质。可以多继承。构造器不能带参数
共同点 1.都有:具体属性,抽象属性,具体方法,抽象方法 2.都使用extends来做继承