kotlin - 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)
}
}
解决方案
super
调用 - 方法时不需要添加关键字attack(..)
。只要打电话attack(charator, power + 2)
。您只需检查Charator
类中的攻击方法是否不是私有的(public 是 Kotlin 中的默认可见性,因此它会起作用)。仅当您覆盖一个函数并且想要从父类调用被覆盖的方法时才需要
。super
但是对于你的bite
方法却不是这样。
推荐阅读
- sql-server - 我缺少哪些显式权限会阻止表级别的有效 INSERT 权限?
- javascript - 这是什么意思:公共子
(params: { new(...args: any[]): T }): Observable - jquery - 当我根据用户的操作创建新脚本时,如何用逗号包装我的输入?
- watchkit - watchOS上CloudKit的WKRefreshBackgroundTask?
- xamarin - 活动没有通过 super.onresume 异常调用
- javascript - 通过带有索引的jquery ajax发送php数组并接收数组值
- algorithm - 将数字分成三组
- algorithm - 从 100 万个对象的列表中搜索
- c# - “内部”变量通过函数
- git - 将 Go Dep 与私有 Gitlab 存储库一起使用