Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将另一个类中的函数继承到kotlin中的活动中?_Android_Inheritance_Kotlin_Overloading - Fatal编程技术网

Android 如何将另一个类中的函数继承到kotlin中的活动中?

Android 如何将另一个类中的函数继承到kotlin中的活动中?,android,inheritance,kotlin,overloading,Android,Inheritance,Kotlin,Overloading,我有我的自定义SDK代码,其中有一个管理器类,它有两个函数,如“function1(abc,def)”、function2(abc,def)和function3(abc,def)。 现在我有了一个活动,我正在尝试使用SDK中的这些函数。如何继承管理器函数中已使用的函数并定义自己的函数 以下是我在manager中的代码: override fun function1(reader: Reader?, openType: OpeningType?) { some code } overr

我有我的自定义SDK代码,其中有一个管理器类,它有两个函数,如“function1(abc,def)”、function2(abc,def)和function3(abc,def)。 现在我有了一个活动,我正在尝试使用SDK中的这些函数。如何继承管理器函数中已使用的函数并定义自己的函数

以下是我在manager中的代码:

 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。一些代码被注释掉了,这是因为这是java的工作方式,不确定如何继承kotlin中的代码(kotlin中的super-equired?),因此我可以继承该代码,并在此基础上添加我的附加代码。我该怎么做呢?对kotlin来说非常陌生,并且不确定所使用的构造。

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


另外,由于它在这里并不真正适用,所以您可以查看一些内容。在kotlin中,您还可以使用委托的概念,这意味着您允许实现接口的类的实例为您的类提供该接口的属性。

让我在iFanie的回答上再补充一点

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

因为活动是一个类而不是一个接口,所以不允许从活动扩展第二个类

你有两种方法来解决这个问题

  • 您可以添加一个接口,强制您的活动实现其方法
  • 您可以创建一个新的父类来扩展活动。此父类将包含所需的方法
  • 你会有这样的想法:


    活动此Managerlistener类基本上是一个具有上述3个功能的接口,我能否使用该接口并从我的活动中实现它,然后实现这些功能?现在似乎可以工作了,但是,当我通过调试器运行这些函数时,它们似乎没有被调用/触发。另外,我在另一个类中实现了这些,我想从其中继承代码,并在活动中实现的相同函数中添加新代码如果ManagerListener是一个接口,那么您可以在活动中实现它并定义方法。我很难告诉您为什么在没有看到实际代码的情况下不会调用这些方法。然而,我能说的是,大多数时候,问题是侦听器没有正确地设置在应该调用方法的对象上。另外,如果你想扩展你的方法,Java 8和Kotlin的默认接口方法可以让你做到这一点。它就像一个符咒,我唯一缺少的就是在activity中的派生函数中引用function3(reader,opentype,,,,)等函数,最重要的是我忘记了在create中注册侦听器。现在很好用
    interface MyInterface {
        val prop: Int // abstract
    
        val propertyWithImplementation: String
            get() = "foo"
    
        fun foo() {
            print(prop)
        }
    }
    
    class Child : MyInterface {
        override val prop: Int = 29
    }