trait Action {
def doAction
}
trait TBeforeAfter extends Action {
abstract override def doAction: Unit = {
println("Initialization")
super.doAction
println("Destoryed")
}
}
trait TBeforeAfter2 extends Action {
abstract override def doAction: Unit = {
println("Initialization2")
super.doAction
println("Destoryed2")
}
}
class Work extends Action {
override def doAction = println("doAction")
}
object TraitLearning extends App {
val work = new Work with TBeforeAfter with TBeforeAfter2
work.doAction
}成果产出:
Initialization2
Initialization
doAction
Destoryed
Destoryed2有人能告诉我为什么只叫一次doAction而叫两次吗?
发布于 2016-02-21 14:51:36
这两个特征,Work和他们的doAction方法都被称为。调用链是这样执行的:
work.doAction ->调用TBeforeAfter2.doAction,因为它是实例化图中的最后一次混合。TBeforeAfter2.doAction打印"Initialization2",并调用super.doAction,这是TBeforeAfter.doAction,是对象图中的下一个混音。TBeforeAfter.doAction打印“初始化”,并调用它的super,即Work。Work.doAction打印"doAction",并返回TBeforeAfter.doAction打印“销毁”并返回到TBeforeAfter2TBeforeAfter2.doAction打印"Destroyed2“并返回,并结束调用链。https://stackoverflow.com/questions/35537263
复制相似问题