Traits and Composition
Overriding Trait Methods
Replace a trait default with a class-specific value.
override-method
A class can override a trait's default method with `override` to provide its own result while keeping the same contract.
Overriding Trait Methods
OverrideMethod.scala
Replay: real traced execution (multi-file project)
trait Pricing {
def fee: Int = 5
}
class Premium extends Pricing {
override def fee: Int = 20
override def toString: String = "[premium]"
}
object Main {
def main(args: Array[String]): Unit = {
val amount = 100
val plan = new Premium()
val total = amount + plan.fee
println("fee=" + plan.fee)
println("total=" + total)
}
}
trait Pricing {
def fee: Int = 5
}
class Premium extends Pricing {
override def fee: Int = 20
override def toString: String = "[premium]"
}
object Main {
def main(args: Array[String]): Unit = {
val amount = 50
val plan = new Premium()
val total = amount + plan.fee
println("fee=" + plan.fee)
println("total=" + total)
}
}
trait Pricing {
def fee: Int = 5
}
class Premium extends Pricing {
override def fee: Int = 20
override def toString: String = "[premium]"
}
object Main {
def main(args: Array[String]): Unit = {
val amount = 200
val plan = new Premium()
val total = amount + plan.fee
println("fee=" + plan.fee)
println("total=" + total)
}
}
amount ← 100, plan ← [premium], total ← 120
10object Main {11 def main(args: Array[String]): Unit = {12 val amount→ 100 = 100 //@amount=50, 20013 val plan→ [premium] = new Premium()14 val total→ 120 = amount100 + plan.fee201516 println("fee=" + plan.fee20)17 println("total=" + total120)18 }19}outputfee=20 total=120
amount ← 50, plan ← [premium], total ← 70
10object Main {11 def main(args: Array[String]): Unit = {12 val amount→ 50 = 5013 val plan→ [premium] = new Premium()14 val total→ 70 = amount50 + plan.fee201516 println("fee=" + plan.fee20)17 println("total=" + total70)18 }19}outputfee=20 total=70
amount ← 200, plan ← [premium], total ← 220
10object Main {11 def main(args: Array[String]): Unit = {12 val amount→ 200 = 20013 val plan→ [premium] = new Premium()14 val total→ 220 = amount200 + plan.fee201516 println("fee=" + plan.fee20)17 println("total=" + total220)18 }19}outputfee=20 total=220