Traits and Composition
Implementing a Trait
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
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)
}
}
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
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
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