W Javie możesz zrobić coś takiego jak:
class MyClass extends SuperClass implements MyInterface, ...
Czy w Kotlinie można zrobić to samo? Założenie SuperClass
jest abstrakcyjne i nie realizujeMyInterface
Nie ma różnicy składniowej między implementacją interfejsu a dziedziczeniem klas . Po prostu wypisz wszystkie typy oddzielone przecinkami po dwukropku, :
jak pokazano tutaj:
abstract class MySuperClass
interface MyInterface
class MyClass : MySuperClass(), MyInterface, Serializable
Dziedziczenie wielu klas jest zabronione, podczas gdy wiele interfejsów może być implementowanych przez jedną klasę.
Oto ogólna składnia, której należy używać, gdy klasa rozszerza (inną klasę) lub implementuje (jeden lub serwerowy interfejs):
class Child: InterfaceA, InterfaceB, Parent(), InterfaceZ
Zauważ, że kolejność klas i interfejsów nie ma znaczenia.
Zauważ też, że dla klasy, która jest rozszerzona, używamy nawiasów, nawias ten odnosi się do głównego konstruktora klasy macierzystej. Dlatego jeśli główny konstruktor klasy nadrzędnej przyjmuje argument, klasa potomna również powinna przekazać ten argument.
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") } }
źródło