为什么我们应该在 Kotlin 中为抽象 class 成员使用 'override' 关键字?

Why should we use the 'override' key word in Kotlin for abstact class members?

如果基础 class 有一个抽象方法或 属性,则必须在子 class 中覆盖这些成员。文档说我每次都必须为此类成员使用关键字“override”,因为我必须在子 class 中实现方法或初始化属性。例如:

abstract class Dwelling {
    abstract val buildingMaterial: String

    abstract fun hasRoom() : Boolean
}

class RoundHut : Dwelling() {
    override val buildingMaterial = "Stone"

    override fun hasRoom() : Boolean {
         return true
    }
}

如果抽象方法和 属性 必须以任何方式在子 class 中覆盖和实现(并且编译器知道这一点),那么为什么我们应该写 'override' 关键词时间?

当您发现自己阅读并理解了实现 class 时,您就会得到明确的信息,表明您目前正在调查一个被覆盖的项目,因为它被明确标记为如此。 Kotlin 喜欢把事情说清楚,文档说明

[...] we stick to making things explicit in Kotlin. So, Kotlin requires explicit modifiers for overridable members (we call them open) and for overrides

Java 有一个可选的 @Override 注释,虽然它被认为是最佳实践(甚至根据 Effective Java),但并不是每个人都使用它。 Kotlin 更进一步,使其成为编译器强制要求。