fun Son.foo() = println("son called extention foo")
object Test {
@JvmStatic
fun main(args: Array<String>) {
Son().foo()
}
}
复制代码
在我们的预期中,我们希望调用的是扩展函数foo(),但是输出结果为:son called member foo。这表明:当扩展函数和现有类的成员方法同时存在时,Kotlin将会默认使用类的成员方法。看起来似乎不够合理,并且很容易引发一些问题:我定义了新的方法,为什么照旧调用到了旧的方法?
但是换一个角度思考,在多人开发的时候,如果每个人都对Son扩展了foo方法,是不是很容易造成肴杂。对于第三方类库来说甚至是一场劫难:我们把不应该更改的方法改变了。以是在使用时,我们必须注意:同名的类成员方法的优先级总高于扩展函数。
3.类的实例与接收者的实例