具有特徵的可堆疊修改
你可以使用特徵來以可堆疊的方式使用特徵來修改類的方法。
以下示例顯示瞭如何堆疊特徵。特徵的排序很重要。使用不同的特徵順序,實現不同的行為。
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()
方法。只有這樣我們才能實現可堆疊的修改。在可堆疊修改的情況下,方法呼叫順序由 線性化規則 確定。