在Kotlin同时扩展和实施

chn*_*mez 57 java kotlin

在Java中,您可以执行以下操作:

class MyClass extends SuperClass implements MyInterface, ...
Run Code Online (Sandbox Code Playgroud)

可以在Kotlin做同样的事情吗?假设SuperClass是抽象的并且没有实现MyInterface

s1m*_*nw1 104

接口实现类继承之间没有语法差异.只需列出冒号后以逗号分隔的所有类型:,如下所示:

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable
Run Code Online (Sandbox Code Playgroud)

禁止多类继承,而单个类可以实现多个接口.

  • 那么顺序重要吗?或者括号是否负责处理哪个是父级、哪个是接口? (2认同)

Mr.*_*r.Q 7

这是在类扩展(另一个类)或实现(一个或多个接口)时使用的通用语法:

class Child: InterfaceA, InterfaceB, Parent(), InterfaceZ
Run Code Online (Sandbox Code Playgroud)

请注意,类和接口的顺序无关紧要。

另外,请注意,对于扩展的类,我们使用括号,括号是指父类的主要构造函数。因此,如果父类的主构造函数接受一个参数,那么子类也应该传递该参数。

interface InterfaceX {
   fun test(): String
}

open class Parent(val name:String) {
    //...
}

class Child(val toyName:String) : InterfaceX, Parent("dummyName"){

    override fun test(): String {
        TODO("Not yet implemented")
    }
}
Run Code Online (Sandbox Code Playgroud)