更新 2020-12-23
起源描述有点混乱。Kotlin 不仅允许在子类中使用 getter 相同的签名,而且在自类中也允许使用相同的签名。所以这也是允许的:
open class BaseRequest {
val params = mutableMapOf<String, String>()
fun getParams(): List<String> {
return params.values.toList()
}
}
Run Code Online (Sandbox Code Playgroud)
正如@Slaw 所说,这是 kotlin 编译器的行为,因为 JVM 使用地址而不是“签名”调用正确的方法,所以它可以工作。
我遇到了一种情况,似乎 Kotlin 允许子类创建与超类的 getter 相同的签名。
通常,函数具有相同的签名并且不允许不同的返回类型。所以我对这种情况感到困惑。我不确定这是否是故意的。
这是一个示例:
open class BaseRequest {
val params = mutableMapOf<String, String>()
init {
params["key1"] = "value1"
}
}
class SpecificRequest : BaseRequest() {
init {
params["key2"] = "value2"
}
fun getParams(): List<String> {
return params.values.toList()
}
}
Run Code Online (Sandbox Code Playgroud)
MediatorRequest 有一个函数getParams(),它与它的超类具有相同的签名,但具有不同的返回类型。在使用这个函数时,子类和超类似乎有相同声明的不同实现。
fun main() {
val specificRequest …Run Code Online (Sandbox Code Playgroud) kotlin ×1