Replace an open parent method in a subclass.

override A subclass uses `override` to provide its own method body.

Override Methods

side
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")
}
  1. side ← 4

    13fun main() {14    val side→ 4 = 4 //@side=2, 715    val square = Square(side4)16    val label = square.label()
  2. override fun label(): String

    7class Square(val side: Int) : Shape() {8    override fun label(): String {9        return "square:$side4"10    }
  3. 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
  1. side ← 2

    13fun main() {14    val side→ 2 = 215    val square = Square(side2)16    val label = square.label()
  2. override fun label(): String

    7class Square(val side: Int) : Shape() {8    override fun label(): String {9        return "square:$side2"10    }
  3. 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
  1. side ← 7

    13fun main() {14    val side→ 7 = 715    val square = Square(side7)16    val label = square.label()
  2. override fun label(): String

    7class Square(val side: Int) : Shape() {8    override fun label(): String {9        return "square:$side7"10    }
  3. 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