如何从kotlin

时间:2017-12-13 22:47:23

标签: kotlin

我有一个超级课程:

open class A {
    fun doStuff() {

    }
}

然后我有一个子类扩展了:

class B: A() {
   companion object {
        doStuff() //compile error
   }
}

如何从伴侣对象调用我的doStuff()方法?

2 个答案:

答案 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类的方法。