kotlin - kotlin,该函数在基类的init block 中调用

标签 kotlin inheritance

具有一个基类和一个从其派生的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")

我们将看到输出:

in Child doInit()



因此,当创建子对象并在被子类覆盖的基类中调用函数时,将调用子函数。这就是Polymorphism

关于kotlin - kotlin,该函数在基类的init block 中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62460891/

相关文章:

java - "Object"不是这个 Realm 的架构的一部分

Android:使用 Room 和 RxJava 检查对象是否存在于数据库中

c++ - C++编写的分词器的继承设计

.net - 从子应用程序卸载 web.config 文件的一部分

java - 我添加到依赖项哈希中的(类路径?)字符串在哪里?

java - Android 获取一个Layout拥有的所有children(包括Sub-childs)

android - 设置 minifyEnabled 为真时无法使用 GSON 解析 json 对象

python - super() 失败并出现错误 : TypeError "argument 1 must be type, not classobj" when parent does not inherit from object

python - 我可以让父类(super class)返回对 "actual type"的引用吗?

c++ - 避免在方法调用中进行对象切片