Given the following code:
open class Foo {
companion object {
fun fez() {}
}
}
class Bar : Foo() {
companion object {
fun baz() { fez() }
}
}
baz()
can call fez()
Foo.fez()
Bar.baz()
Bar.fez()
How do I achieve the final behaviour?
A companion object is a static member of its surrounding class:
public class Foo {
public static final Foo.Companion Companion;
public static final class Companion {
public final void fez() {
}
//constructors
}
}
The call to fez()
is compiled to :
Foo.Companion.fez();
FYI: The shown Java code shows a representation of the bytecode generated by Kotlin.
As a result, you cannot call Bar.fez()
because the Companion object in Bar
does not have that method.