使用特征时,我很难理解Scala中的线性化顺序:
class A {
def foo() = "A"
}
trait B extends A {
override def foo() = "B" + super.foo()
}
trait C extends B {
override def foo() = "C" + super.foo()
}
trait D extends A {
override def foo() = "D" + super.foo()
}
object LinearizationPlayground {
def main(args: Array[String]) {
var d = new A with D with C with B;
println(d.foo) // CBDA????
}
}
Run Code Online (Sandbox Code Playgroud)
它打印CBDA但我无法弄清楚为什么.如何确定特征的顺序?
谢谢