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()
}
}

浙公网安备 33010602011771号