例如,这个:
val queue = new BasicIntQueue with Doubling with Incrementing with Filtering
queue.put(1)
println(queue.get())
将打印:
Filtering
Incrementing
Doubling
put
4
至于我,如果按照我编写的操作顺序从左到右执行它会更具可读性。
答案 0 :(得分:7)
因为它遵循与继承相同的模式。想象一下你有这样的事情:
class BasicIntQueue
class Doubling extends BasicIntQueue
class Incrementing extends Doubling
class Filtering extends Incrementing
val queue = new Filtering
您将获得与您所见相同的结果:首先执行Filtering
,然后传递到Incrementing
,然后传递到Doubling
,最后传递到BasicIntQueue
。
答案 1 :(得分:6)
不要想'执行',因为它不是......想'分层':如果你在右边添加另一个with XYZ
,你就在顶部添加了另一层。
答案 2 :(得分:3)
事实更为复杂,请参阅Language Reference“5.1.2班级线性化”(第56页)或Jim McBeath的解释
答案 3 :(得分:0)
解决多重继承的钻石问题