Kotlin访问派生types中的伴随对象成员

给出以下代码:

open class Foo { companion object { fun fez() {} } } class Bar : Foo() { companion object { fun baz() { fez() } } } 
  • baz()可以调用fez()
  • 我可以打电话给Foo.fez()
  • 我可以打电话给Bar.baz()
  • 但是,我不能打电话给Bar.fez()

我如何实现最终的行为?

随播对象是其周围类的静态成员:

 public class Foo { public static final Foo.Companion Companion; public static final class Companion { public final void fez() { } //constructors } } 

fez()的调用被编译为:

 Foo.Companion.fez(); 

所示的Java代码显示了由Kotlin生成的字节码的表示forms。

因此,不能调用Bar.fez()因为Bar中的Companion对象没有该方法。