Let a subclass reuse a parent class property.

inheritance A subclass can extend an open parent class.

Inheritance Basics

name
InheritanceBasics.kt
Replay: real traced execution (multi-file project)
open class Animal(val name: String) {
    fun label(): String {
        return "animal:$name"
    }
}

class Dog(name: String) : Animal(name)

fun main() {
    val name = "Rex"
    val dog = Dog(name)
    val label = dog.label()

    println("name=$name")
    println("label=$label")
}
open class Animal(val name: String) {
    fun label(): String {
        return "animal:$name"
    }
}

class Dog(name: String) : Animal(name)

fun main() {
    val name = "Milo"
    val dog = Dog(name)
    val label = dog.label()

    println("name=$name")
    println("label=$label")
}
open class Animal(val name: String) {
    fun label(): String {
        return "animal:$name"
    }
}

class Dog(name: String) : Animal(name)

fun main() {
    val name = "Nia"
    val dog = Dog(name)
    val label = dog.label()

    println("name=$name")
    println("label=$label")
}
  1. name ← Rex

    9fun main() {10    val name→ Rex = "Rex" //@name="Milo", "Nia"11    val dog = Dog(nameRex)12    val label = dog.label()
  2. fun label(): String

    1open class Animal(val name: String) {2    fun label(): String {3        return "animal:$nameRex"4    }
  3. label ← animal:Rex

    11    val dog = Dog(name)12    val label→ animal:Rex = dog.label()1314    println("name=$nameRex")15    println("label=$labelanimal:Rex")16}
    outputname=Rex
    label=animal:Rex
  1. name ← Milo

    9fun main() {10    val name→ Milo = "Milo"11    val dog = Dog(nameMilo)12    val label = dog.label()
  2. fun label(): String

    1open class Animal(val name: String) {2    fun label(): String {3        return "animal:$nameMilo"4    }
  3. label ← animal:Milo

    11    val dog = Dog(name)12    val label→ animal:Milo = dog.label()1314    println("name=$nameMilo")15    println("label=$labelanimal:Milo")16}
    outputname=Milo
    label=animal:Milo
  1. name ← Nia

    9fun main() {10    val name→ Nia = "Nia"11    val dog = Dog(nameNia)12    val label = dog.label()
  2. fun label(): String

    1open class Animal(val name: String) {2    fun label(): String {3        return "animal:$nameNia"4    }
  3. label ← animal:Nia

    11    val dog = Dog(name)12    val label→ animal:Nia = dog.label()1314    println("name=$nameNia")15    println("label=$labelanimal:Nia")16}
    outputname=Nia
    label=animal:Nia