如何将功能从另一个类继承到Kotlin中的活动中?

时间:2018-12-10 21:52:55

标签: android inheritance kotlin overloading

我有我的自定义SDK代码,其中有一个管理器类,该类具有几个函数,分别为“ function1(abc,def)”,function2(abc,def)和function3(abc,def)。 现在,我正在尝试使用SDK中的这些功能。如何继承管理器功能中已经使用的功能+定义自己的功能?

这是我在管理员中的代码:

 override fun function1(reader: Reader?, openType: OpeningType?) {
   some code 
}
 override fun function2(reader: Reader?, openingResult: OpeningResult?) {
 some code 
}
 override fun function3(reader: Reader?, openType: OpeningType?, openingStatus: OpeningStatus?) {
some code
}

现在我有一个活动,使用该SDK作为依赖项,我想使用这些功能,例如

class MyActivity : AppCompatActivity(),Managerlistener {
 override fun function1(reader: Reader?, openType: OpeningType?) {
// super. some code? 
     }
     override fun function2(reader: Reader?, openingResult: OpeningResult?) {
// super. some code? 

    }
     override fun function3(reader: Reader?, openType: OpeningType?, openingStatus: OpeningStatus?) {
// super. some code? 

    }


...
}

现在,您可能已经注意到我有super.some代码被注释掉了,那是因为它是java的处理方式,不确定如何继承kotlin中的代码(kotlin中的超级等效项?),所以我可以继承该代码,然后在其中添加我的其他代码。我该怎么做?对于Kotlin来说还很陌生,不确定所使用的结构。

2 个答案:

答案 0 :(得分:1)

您不能继承多个以上的超类,因此假设ManagerListener是一个接口,那么您编写的内容是正确的。至于超级调用,在kotlin中是相同的,但是在您的情况下,您不需要它,因为您要覆盖没有任何super实现的接口方法。

此外,因为它实际上并不适用于您,因此您可以看一下,在kotlin中,您还可以使用委托的概念,这意味着您可以允许实现接口的类的实例为您的类提供属性该界面。

答案 1 :(得分:1)

让我在iFanie的答案上再加上一点。

他说的是真的。与Kotlin一样,在Java中,不允许多重继承。一个类只能扩展一个类,但可以实现许多接口。

由于Activity是一个类而不是一个接口,因此您不能从该活动中扩展第二个类。

您有2种方法可以解决此问题

  1. 您可以添加一个接口,该接口将强制您的活动实现其方法。
  2. 您可以创建一个新的父类,以扩展Activity。该父类将包含您想要的方法

您会有类似这样的内容:

活动<--- CustomParentActivity {doSomething(),doSomethingElse()} <--- YourActualActivity

另一个值得关注的事情是接口中的默认实现。 使用Java 8,您可以在可能满足您需求的接口中提供默认实现。

如果您查看https://kotlinlang.org/docs/reference/interfaces.html

interface MyInterface {
    val prop: Int // abstract

    val propertyWithImplementation: String
        get() = "foo"

    fun foo() {
        print(prop)
    }
}

class Child : MyInterface {
    override val prop: Int = 29
}