为什么我们应该在 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 更进一步,使其成为编译器强制要求。
如果基础 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 更进一步,使其成为编译器强制要求。