Trait多继承顺序:
准则:
- 如果有超类,则先调用超类的函数。
- 如果混入的trait有父trait,它会按照继承层次先调用父trait的构造函数。
- 如果有多个父trait,则按顺序从左到右执行。
- 所有父类构造函数和父trait被构造完之后,才会构造本类的构造函数。
object TraitOrder extends App { trait Logger { println("Logger") } trait FileLogger extends Logger { println("FileLogger") } trait Closable { println("Closable") } class Person{ println("Constructing Person...") } class Student extends Person with FileLogger with Closable { println("Constructing Student ...") } new Student }
运行结果: