- 先父后子。先调用父类构造器,再调用子类构造器
- 有多个父类,从左到右的顺序去调用构造器
package level02
/**
*多继承时,构造器调用顺序
*1. 先父后子。先调用父类构造器,再调用子类构造器
*2. 有多个父类,从左到右的顺序去调用构造器
**/
object l16 {
trait A {
println("trait A")
}
trait B {
println("trait B")
}
trait C {
println("trait C")
}
class Class1 extends B with A with C{
println("class 1...")
}
def main(args: Array[String]): Unit = {
new Class1()
}
}
package level02
/**
*多继承时,构造器调用顺序
*1. 先父后子。先调用父类构造器,再调用子类构造器
*2. 有多个父类,从左到右的顺序去调用构造器
**/
object l17 {
trait A {
println("trait A")
}
trait BB {
println("trait BB")
}
trait B {
println("trait B")
}
trait CC {
println("trait CC")
}
trait C {
println("trait C")
}
class Class1 extends B with BB with A with C with CC{
println("class 1...")
}
def main(args: Array[String]): Unit = {
new Class1()
}
}
trait和抽象类class的 区别?
package level02
/**
*trait和抽象类class的 区别?
*
* 1.相同点。
* 可以被继承,extends
* 属性和方法:抽象属性,具体属性,抽象方法。具体方法
* 都不能被实例化。不能new
*
*2. 不同点。
* trait 支持多继承;抽象类不能多继承;
*
*
**/
object l18 {
trait A {
println("trait A")
}
trait B {
println("trait A")
}
class C extends A with B{
}
def main(args: Array[String]): Unit = {
new C()
}
}
空指针异常
package level02
import java.io.FileWriter
/**
*空指针异常
*
*目标:实现日志类,可以把一些文本信息写入指定的文件中
*
*/
object l19 {
trait Log {
//抽象属性:文件名
var fileName:String
println(s"$fileName")
//具体属性
lazy val fileWriter:FileWriter=new FileWriter(fileName)
def writeLog(msg:String):Unit={
fileWriter.write(msg)
fileWriter.close()
}
}
class TexLog extends Log{
var fileName:String="text01.log"
}
def main(args: Array[String]): Unit = {
val texlog=new TexLog()
texlog.writeLog("2025-11-19:下午,天气晴朗")
}
}