Если мы определим классы следующим образом:
open class Base(var data: String) {
init {
doInit()
}
protected open fun doInit() {
data += " in Base doInit()"
println("in Base doInit()")
}
}
class Child(data: String): Base(data) {
override fun doInit() {
data += " in Child doInit()"
println("in Child doInit()")
}
}
и создадим дочерний объект:
val obj = Child("child")
, мы увидим результат:
в Дочерний doInit ()
Таким образом, при создании дочернего объекта и вызове функции в базовом классе, которая переопределяется в дочернем классе, вызывается дочерняя функция. Это называется полиморфизм .