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

amount
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)
  }
}
  1. 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
  1. 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
  1. 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