具有特征的可堆叠修改
你可以使用特征来以可堆叠的方式使用特征来修改类的方法。
以下示例显示了如何堆叠特征。特征的排序很重要。使用不同的特征顺序,实现不同的行为。
class Ball {
def roll(ball : String) = println("Rolling : " + ball)
}
trait Red extends Ball {
override def roll(ball : String) = super.roll("Red-" + ball)
}
trait Green extends Ball {
override def roll(ball : String) = super.roll("Green-" + ball)
}
trait Shiny extends Ball {
override def roll(ball : String) = super.roll("Shiny-" + ball)
}
object Balls {
def main(args: Array[String]) {
val ball1 = new Ball with Shiny with Red
ball1.roll("Ball-1") // Rolling : Shiny-Red-Ball-1
val ball2 = new Ball with Green with Shiny
ball2.roll("Ball-2") // Rolling : Green-Shiny-Ball-2
}
}
请注意,super
用于在两个特征中调用 roll()
方法。只有这样我们才能实现可堆叠的修改。在可堆叠修改的情况下,方法调用顺序由 线性化规则 确定。