特质
特质:实现多继承 trait多继承构造器的执行顺序
- 先父 后子
- 如果是多继承,有多个trait,按书写顺序从左到右
/*
特质
特质:实现多继承
trait多继承构造器的执行顺序
1. 先父 后子
2. 如果是多继承,有多个trait,按书写顺序从左到右
**/
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 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()
}
import java.io.FileWriter
//*
//*
object sc03 {
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("测试内容")
}
}
trait 和 class 的区别
- class 类。伴生类,抽象类,内部类。不能多继承。
- trait 特质。可以多继承。构造器不能带参数。extends with
共同点
- 都可以有:具体属性,抽象属性,具体方法,抽象方法
- 都使用extends来做继承
import java.io.FileWriter
/*
trait 和 class 的区别
1. class 类。伴生类,抽象类,内部类。不能多继承。
2. trait 特质。可以多继承。构造器不能带参数。extends with
共同点
1. 都可以有:具体属性,抽象属性,具体方法,抽象方法
2. 都使用extends来做继承
*/
object sc04 {
class A{}
trait B{}
class AB extends A with B{
}
def main(args: Array[String]): Unit = {
}
}