1.20

trait 构造机制
每个特质只有一个无参构造器

遇到一个类继承另一个类以及多个trait的情况,创建该类实例时构造器执行顺序:

执行父类构造器
从左到右依次执行 trait 的构造器
如果trait 有父 trait,先执行父 trait
如果多个 trait 有相同的父 trait,父 trait 构造器只初始化一次
执行子类构造器
示例:

object ClassDemo {

trait A{
println("A")
}

trait B extends A{
println("B")
}

trait C extends A{
println("C")
}

class D{
println("D")
}

class E extends D with B with C{
println("E")
}

def main(args: Array[String]): Unit = {
new E//DABCE
}

}


trait 继承 class
trait 可以继承 class,会将所有的成员都继承下来。

示例:

object ClassDemo {

class A{
def printMsg(): Unit = println("hello scala")
}

trait B extends A

class C extends B

def main(args: Array[String]): Unit = {
new C().printMsg()//hello scala
}

}

案例:程序员
object ClassDemo {

abstract class Programmer{
val name = ""
val age = 0

def eat(): Unit = println("eat")
def code()
}

class JavaProgrammer extends Programmer{
override def code(): Unit = println("精通 java")
}

trait BigData{
def bigData(): Unit = println("精通大数据")
}

class PartJavaProgrammer extends JavaProgrammer with BigData{
override def code(): Unit = {
super.code()
bigData()
}
}

def main(args: Array[String]): Unit = {
val javaProgrammer = new PartJavaProgrammer
javaProgrammer.code()
}

}

 

posted @ 2025-02-07 13:49  七安。  阅读(16)  评论(0)    收藏  举报