考虑:
abstract class Base {
def something() = println("Base")
}
trait TraitA extends Base {
abstract override def something() = { super.something(); println("TraitA"); }
}
class Child extends Base {
override def something() {
println("Child")
}
}
接着:
val x = new Child with TraitA
x.something()
我得到:
Child
TraitA
但如果我使用:
class Child extends Base with TraitA {
override def something() {
println("Child")
}
}
val x = new Child
x.something()
我只会得到:
Child
那么在施工现场或申报现场使用 trait 有什么不同呢?在类的声明中扩展/使用特征时,我可以有第一个行为(可堆叠特征)吗?