首页 > 解决方案 > Kotlin 继承问题。看 [Q.] 部分

问题描述

怎么能用super呢?它没有覆盖。

我了解到,如果我想将 SUPER CLASS 拖入 LOWER CLASS 并修改方法,我必须添加 [override]。但是那个[有趣的一口]没有。

看Q.部分

open class Charator(var hp: Int, val power: Int) {

    fun attack(charator: Charator, power: Int = this.power) {
        charator.defense(power)
    }

    open fun defense(damage: Int) {
        hp -= damage
        if (hp > 0) println("${javaClass.simpleName}'s hp is $hp ")
        else println("die")
    }
}


class SuperMonster(hp: Int, power: Int) : Charator(hp, power) {
    fun bite(charator: Charator) {   **------> Q. HOW CAN USE super EVEN DO NOT HAVE override ?**
                                                
        super.attack(charator, power + 2)
    }
}

标签: kotlin

解决方案


super调用 - 方法时不需要添加关键字attack(..)。只要打电话attack(charator, power + 2)。您只需检查Charator类中的攻击方法是否不是私有的(public 是 Kotlin 中的默认可见性,因此它会起作用)。仅当您覆盖一个函数并且想要从父类调用被覆盖的方法时才需要
super但是对于你的bite方法却不是这样。


推荐阅读