一:trait多继承构造器的执行顺序
特质
trait: 实现多继承
trait多继承构造器的执行顺序
1:先父 后子
2:如果是多继承,有多个trait,按书写书序从左到右
trait AA {
println("AA特质构造器")
}
trait A extends AA{
println("A 构造器")
}
trait B {
println("B特质构造器")
}
trait CC {
println("C特质构造器")
}
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()
}
}
二:多层trait的加载顺序
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("Mymriter")
override val filename: String = "test.log"
}
def main(args: Array[String]): Unit = {
val log = new MyWriter()
log.writeLog("测试内容")
}
}
三: trait和class的区别
1: class 类。伴生类,抽象类,内部类,不能多继承
2: trait 特质 可以多继承,构造器不能带参数。 extends with
共同点
1: 都可以有: 具体属性 抽象属性 具体方法 抽象方法 2: 都使用exten来做继承 */
case object class14 {
class A{}
trait B{}
class AB extends A with B{
}
def main(args: Array[String]): Unit = {
}
}