//继承多个特质时,加载的顺序
//1.先父后子
//2.从左到右
trait A051{
println("1")
}
trait B051{
println("2")
}
class AB extends A051 with B051{
println("AB")
}
object Test20_2 {
def main(args: Array[String]): Unit = {
new AB()
}
}
trait A051{println("A051")}
trait AA051 extends A051{println("AA051")}
trait AB051 extends A051{println("AA051")}
trait B051{println("B051")}
trait BA051 extends B051{println("BA051")}
trait BB051 extends B051{println("BB051")}
class AB extends AA051 with BA051 with AB051 with BB051{
println("AB")
}
object Test21{
def main(args: Array[String]): Unit = {
new AB()
}
}
运行结果(A051
AA051
B051
BA051
AA051
BB051
AB)
import java.io.PrintWriter
trait FileLogger{
val filename: String
println("父类",filename)
//lazy表示不立刻求值而是等到这个变量被使用时去求值
lazy val fileout=new PrintWriter(filename)
//用来把msg写入到对应文件
def log(msg: String): Unit = {
fileout.println(msg)
fileout.flush()
}
}
class Test211 extends FileLogger{
val filename="2024-10-28.txt"
println("子类",filename)
}
object Test21_1 {
def main(args: Array[String]): Unit = {
val t1=new Test211()
t1.log("text!")
}
}
import java.io.PrintWriter
trait FileLogger{
val filename: String
println("父类",filename)
//lazy表示不立刻求值而是等到这个变量被使用时去求值
// lazy val fileout=new PrintWriter(filename)
val fileout=new PrintWriter(filename)
//用来把msg写入到对应文件
def log(msg: String): Unit = {
fileout.println(msg)
fileout.flush()
}
}
class Test211 extends FileLogger{
val filename="2024-10-28.txt"
println("子类",filename)
}
object Test21_1 {
def main(args: Array[String]): Unit = {
// val t1=new Test211()
val t1=new{val filename="2024-10-29.txt"} with FileLogger//匿名类提前定义
t1.log("text!")
}
}
方法二val p =new{override val filename="p052.log"} with Person051