具有一个基类和一个从其派生的Child:
open class Base(var data: String) {
init {
doInit()
}
open protected fun doInit() {
data += " in Base doInit()"
}
}
class Child(data: String): Base(data) {
init {
doInit()
}
override fun doInit() {
data += super.doInit() + " in Child doInit()"
}
}
val obj = Child("child")
在Child(“child”)中,将调用Base的init {}。应该从基地的init {}或从 child 的init {}调用哪种
doInit()
? 最佳答案
如果我们定义这样的类:
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")
我们将看到输出:
因此,当创建子对象并在被子类覆盖的基类中调用函数时,将调用子函数。这就是Polymorphism。
关于kotlin - kotlin,该函数在基类的init块中调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62460891/