为什么我们应该在 Kotlin 中使用"override"关键字来表示 abstact 类成员?



如果基类具有抽象方法或属性,则必须在子类中覆盖这些成员。文档中说,每次对于这样的成员,我都必须使用关键字">override",因为我必须在子类中实现方法或初始化属性。例如:

abstract class Dwelling {
abstract val buildingMaterial: String
abstract fun hasRoom() : Boolean
}
class RoundHut : Dwelling() {
override val buildingMaterial = "Stone"
override fun hasRoom() : Boolean {
return true
}
}

如果一个抽象方法和属性必须以任何方式重写并在子类中实现(编译器知道这一点(,那么为什么我们每次都要写"重写"关键字呢?

当您发现自己正在阅读和理解实现类时,您已经获得了当前正在调查重写类的明确信息,因为它被明确标记为重写类。Kotlin喜欢把事情弄得很清楚,文档中写着

[…]我们坚持在Kotlin中使事情变得明确。因此,Kotlin需要显式修饰符用于可重写成员(我们称之为open(和重写

Java有一个@Override注释,它是可选的,并不是每个人都使用,尽管它被认为是最佳实践(即使是根据Effective Java(。Kotlin更进一步,将其作为编译器强制要求。

最新更新