У меня возникают трудности с пониманием порядка линеаризации в 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????
}
}
Он печатает CBDA
, но я не могу понять, почему. Как определяется порядок признаков?
спасибо