Fill in an abstract trait method inside a class.

class-extends-trait A trait can declare a method without a body. Each class that extends the trait must supply the missing implementation.

Implementing a Trait

side
ClassExtendsTrait.scala
Replay: real traced execution (multi-file project)
trait Shape {
  def area: Int
}

class Square(side: Int) extends Shape {
  def area: Int = side * side
  override def toString: String = "[square]"
}

object Main {
  def main(args: Array[String]): Unit = {
    val side = 4
    val shape = new Square(side)

    println("side=" + side)
    println("area=" + shape.area)
  }
}
trait Shape {
  def area: Int
}

class Square(side: Int) extends Shape {
  def area: Int = side * side
  override def toString: String = "[square]"
}

object Main {
  def main(args: Array[String]): Unit = {
    val side = 2
    val shape = new Square(side)

    println("side=" + side)
    println("area=" + shape.area)
  }
}
trait Shape {
  def area: Int
}

class Square(side: Int) extends Shape {
  def area: Int = side * side
  override def toString: String = "[square]"
}

object Main {
  def main(args: Array[String]): Unit = {
    val side = 5
    val shape = new Square(side)

    println("side=" + side)
    println("area=" + shape.area)
  }
}
  1. side ← 4, shape ← [square]

    10object Main {11  def main(args: Array[String]): Unit = {12    val side→ 4 = 4 //@side=2, 513    val shape→ [square] = new Square(side4)1415    println("side=" + side4)16    println("area=" + shape.area16)17  }18}
    outputside=4
    area=16
  1. side ← 2, shape ← [square]

    10object Main {11  def main(args: Array[String]): Unit = {12    val side→ 2 = 213    val shape→ [square] = new Square(side2)1415    println("side=" + side2)16    println("area=" + shape.area4)17  }18}
    outputside=2
    area=4
  1. side ← 5, shape ← [square]

    10object Main {11  def main(args: Array[String]): Unit = {12    val side→ 5 = 513    val shape→ [square] = new Square(side5)1415    println("side=" + side5)16    println("area=" + shape.area25)17  }18}
    outputside=5
    area=25