Estendi e implementa allo stesso tempo in Kotlin


94

In Java, puoi fare cose come:

class MyClass extends SuperClass implements MyInterface, ...

È possibile fare la stessa cosa a Kotlin? Assumere SuperClassè astratto e non implementaMyInterface

Risposte:


149

Non c'è differenza sintattica tra l' implementazione dell'interfaccia e l' ereditarietà delle classi . Elenca semplicemente tutti i tipi separati da virgole dopo i due punti :come mostrato qui:

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable

L'ereditarietà di più classi è vietata mentre più interfacce possono essere implementate da una singola classe.


2
Quindi l'ordine è importante, o la parentesi si occupa di quale è il genitore e quali sono le interfacce?
SMBiggs

Non riesco a pensare a un motivo per cui l'ordine sarebbe importante. Sì, ogni classe astratta avrà bisogno di parentesi mentre le interfacce funzionano senza. Il compilatore sa se stai implementando un'interfaccia o estendendo una super classe
s1m0nw1

3

Questa è la sintassi generale da usare quando una classe si estende (un'altra classe) o implementa (una o interfacce server):

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

Nota che l'ordine delle classi e delle interfacce non ha importanza.

Inoltre, nota che per la classe estesa utilizziamo le parentesi, la parentesi si riferisce al costruttore principale della classe genitore. Pertanto, se il costruttore principale della classe genitore accetta un argomento, anche la classe figlia dovrebbe passare quell'argomento.

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")
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.