У 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")
}
}