如何在Kotlin中通过子类调用父类Java类的静态方法?
能否通过Kotlin子类调用Java父类的静态方法?
结论:不行,这是Kotlin对Java静态成员的处理机制导致的,和Java的语法糖行为存在差异。
具体原因
Java里允许通过子类名调用父类静态方法,这只是编译器提供的语法糖——编译后实际执行的仍是父类的静态方法,静态成员本身并不属于类的继承体系。
但Kotlin对Java类的静态成员采取了更严格的处理逻辑:它会将Java类的静态成员视为该类独有的顶层成员,不会将其纳入子类的可访问成员范围内。所以你的Kotlin子类BBB并不会继承AAA的静态方法foo(),自然无法通过BBB.foo()调用。
替代实现方式
如果需要类似“通过子类名调用”的效果,可以在Kotlin子类中借助companion object实现一个转发方法:
class BBB : AAA() { companion object { fun foo() { AAA.foo() } } }
此时BBB.foo()就能正常调用,本质是在子类的伴生对象里封装了对父类静态方法的调用,并非真正的继承。
当然,最直接也最符合Kotlin设计理念的方式,还是直接通过父类调用:AAA.foo()。
内容的提问来源于stack exchange,提问作者LLL
相关产品推荐
相关产品推荐

