В Java вы можете делать такие вещи, как:
class MyClass extends SuperClass implements MyInterface, ...
Можно ли сделать то же самое в Котлине? Предполагается SuperClass
абстрактно и не реализуетMyInterface
Ответы:
Синтаксической разницы между реализацией интерфейса и наследованием классов нет . Просто перечислите все типы через запятую после двоеточия, :
как показано здесь:
abstract class MySuperClass
interface MyInterface
class MyClass : MySuperClass(), MyInterface, Serializable
Наследование нескольких классов запрещено, в то время как несколько интерфейсов могут быть реализованы одним классом.
Это общий синтаксис, который следует использовать, когда класс расширяется (другой класс) или реализует (один или несколько интерфейсов):
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")
}
}