我试图弄清楚何时使用相同签名的扩展函数覆盖现有的类函数 - 会生效吗?
这是我的示例代码:
fun String.toUpperCase(): String = "ext. function impl."
fun main(args: Array<String>) {
println("Hello".toUpperCase()) // ext. function impl.
println(MyClass().toUpperCase()) // class impl.
}
class MyClass {
fun toUpperCase() : String {
return "class impl."
}
}
fun MyClass.toUpperCase() : String {
return "ext. function impl."
}
所以:
- 都有些什么样的规矩?什么时候会被调用?
- 我怎样才能推翻这个决定?是否可以?