I have this code:
trait base{
def msg: Unit= {
println{"base"}
}
}
trait foo extends base {
abstract override def msg: Unit ={
super.msg
println("foo")
}
}
class base2{
def msg:Unit = {
println{"base 2"}
}
}
class test extends base2 with foo{
override def msg: Unit ={
super.msg
println("done")
}
}
如果我调用(new test).msg
,这将打印出类似于:base, foo, done
然而,如果我更改基础trait为:
trait base{
def msg: Unit
}
它会输出像这样的内容:base 2,foo,done
我理解with
的顺序是从右到左的(最后一个先出现),但extends
呢?为什么有时会打印base2
,而有时候是base
?
base
trait中添加super.msg
,这样它就会链接到你的base2
类。如果base
没有实现,那么foo
的super.msg
将调用base2
。 - MaciejGórski