scala的trait的构造机制

trait的构造机制
如果一个类实现了多个trait,那这些trait是如何构造的呢?
定义
trait也有构造代码,但和类不一样,特质不能有构造器参数
每个特质只有一个无参数的构造器。
一个类继承另一个类、以及多个trait,当创建该类的实例时,它的构造顺序如下:
执行父类的构造器
从左到右依次执行trait的构造器
如果trait有父trait,先构造父trait,如果多个trait有同样的父trait,则只初始化一次
执行子类构造器
示例
示例说明
定义多个特质,然后用一个类去实现它们
测试trait的构造顺序
步骤:
创建一个Logger特质,在构造器中打印"执行Logger构造器!"
创建一个MyLogger特质,继承自Logger特质,,在构造器中打印"执行MyLogger构造器!"
创建一个TimeLogger特质,继承自Logger特质,在构造器中打印"执行TimeLogger构造器!"
创建一个Person类,在构造器中打印"执行Person构造器!"
创建一个Student类,继承自Person、MyLogger、TimeLogge特质,在构造器中打印"执行Student构造器!"
添加main方法,实例化Student_One类,观察输出。
参考代码:

trait Logger {
    println("执行Logger构造器")
}

trait MyLogger extends Logger {
    println("执行MyLogger构造器")
}

trait TimeLogger extends Logger {
    println("执行TimeLogger构造器")
}

class Person{
    println("执行Person构造器")
}

class Student extends Person with TimeLogger with MyLogger {
    println("执行Student构造器")
}

def main(args: Array[String]): Unit = {
    new Student
}

// 程序运行输出如下:
// 执行Person构造器
// 执行Logger构造器
// 执行TimeLogger构造器
// 执行MyLogger构造器
// 执行Student构造器

在这里插入图片描述
结果:

在这里插入图片描述

发布了139 篇原创文章 · 获赞 333 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_45765882/article/details/104303767
今日推荐