我有这个代码:
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 base{
def msg: Unit
}
它打印出如下内容:base 2, foo, done
我理解的顺序with
从右到左(最后一个先出现)但是怎么样extends
?为什么有时会打印base2
, 但是有时base
?
当你省略实现时,base
is a 特质的模板并且有不同的评价规则。请参阅Scala 规范 http://www.scala-lang.org/files/archive/spec/2.11/05-classes-and-objects.html#example
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)