我有我的自定义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来说还很陌生,不确定所使用的结构。
答案 0 :(得分:1)
您不能继承多个以上的超类,因此假设ManagerListener
是一个接口,那么您编写的内容是正确的。至于超级调用,在kotlin中是相同的,但是在您的情况下,您不需要它,因为您要覆盖没有任何super
实现的接口方法。
此外,因为它实际上并不适用于您,因此您可以看一下,在kotlin中,您还可以使用委托的概念,这意味着您可以允许实现接口的类的实例为您的类提供属性该界面。
答案 1 :(得分:1)
让我在iFanie的答案上再加上一点。
他说的是真的。与Kotlin一样,在Java中,不允许多重继承。一个类只能扩展一个类,但可以实现许多接口。
由于Activity是一个类而不是一个接口,因此您不能从该活动中扩展第二个类。
您有2种方法可以解决此问题
您会有类似这样的内容:
活动<--- 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
}