我有一个超级课程:
open class A {
fun doStuff() {
}
}
然后我有一个子类扩展了:
class B: A() {
companion object {
doStuff() //compile error
}
}
如何从伴侣对象调用我的doStuff()方法?
答案 0 :(得分:6)
你不能。
伴侣对象大致相当于Java中的static关键字。
类doStuff()
(及其子类)的A
函数只能从该类的实际对象调用(如A().doStuff()
或B().doStuff()
)
当试图从B
的伴侣对象中调用该函数时,没有A
(或B
)这样的对象可以调用该函数,因为你'在静态环境中。
如果您编写的Java等效内容,则会收到错误
无法从静态上下文引用非静态方法
这比你从Kotlin的编译器获得的更具描述性,并且得到了很好的解释here。
答案 1 :(得分:0)
您必须创建两个类 A1 和 B1,其中 B1 从 A1 继承,然后从 A1 继承 A 伴生对象,从 B1 继承 B 伴生对象,然后您可以从 B 伴生对象调用 A1 类的方法。注意A1类的方法也是A类的方法。