在Kotlin中同时扩展和实施


88

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

class MyClass extends SuperClass implements MyInterface, ...

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

Answers:


141

接口实现类继承之间没有语法上的区别。只需列出所有在冒号后用逗号分隔的类型:,如下所示:

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable

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


1
那么顺序重要吗,或者括号会照顾哪个是父对象以及哪个是接口?
SMBiggs

我想不出订单为何如此重要的原因。是的,每个抽象类都需要parens,而接口则不需要。编译器知道您是要实现接口还是扩展超类
s1m0nw1

2

这是在类扩展(另一类)或实现(一个或服务器接口)时使用的一般语法:

class Child: InterfaceA, InterfaceB, Parent(), InterfaceZ

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

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

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")
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.