Inheritance and Interfaces
Override Methods
Replace an open parent method in a subclass.
override
A subclass uses `override` to provide its own method body.
Override Methods
OverrideMethods.kt
Replay: real traced execution (multi-file project)
open class Shape {
open fun label(): String {
return "shape"
}
}
class Square(val side: Int) : Shape() {
override fun label(): String {
return "square:$side"
}
}
fun main() {
val side = 4
val square = Square(side)
val label = square.label()
println("side=$side")
println("label=$label")
}
open class Shape {
open fun label(): String {
return "shape"
}
}
class Square(val side: Int) : Shape() {
override fun label(): String {
return "square:$side"
}
}
fun main() {
val side = 2
val square = Square(side)
val label = square.label()
println("side=$side")
println("label=$label")
}
open class Shape {
open fun label(): String {
return "shape"
}
}
class Square(val side: Int) : Shape() {
override fun label(): String {
return "square:$side"
}
}
fun main() {
val side = 7
val square = Square(side)
val label = square.label()
println("side=$side")
println("label=$label")
}
side ← 4
13fun main() {14 val side→ 4 = 4 //@side=2, 715 val square = Square(side4)16 val label = square.label()override fun label(): String
7class Square(val side: Int) : Shape() {8 override fun label(): String {9 return "square:$side4"10 }label ← square:4
15 val square = Square(side)16 val label→ square:4 = square.label()1718 println("side=$side4")19 println("label=$labelsquare:4")20}outputside=4 label=square:4
side ← 2
13fun main() {14 val side→ 2 = 215 val square = Square(side2)16 val label = square.label()override fun label(): String
7class Square(val side: Int) : Shape() {8 override fun label(): String {9 return "square:$side2"10 }label ← square:2
15 val square = Square(side)16 val label→ square:2 = square.label()1718 println("side=$side2")19 println("label=$labelsquare:2")20}outputside=2 label=square:2
side ← 7
13fun main() {14 val side→ 7 = 715 val square = Square(side7)16 val label = square.label()override fun label(): String
7class Square(val side: Int) : Shape() {8 override fun label(): String {9 return "square:$side7"10 }label ← square:7
15 val square = Square(side)16 val label→ square:7 = square.label()1718 println("side=$side7")19 println("label=$labelsquare:7")20}outputside=7 label=square:7