In Kotlin gleichzeitig erweitern und implementieren

88

In Java können Sie Folgendes tun:

class MyClass extends SuperClass implements MyInterface, ...

Ist es möglich, dasselbe in Kotlin zu tun? Angenommen, es SuperClassist abstrakt und wird nicht implementiertMyInterface

chntgomez
quelle

Antworten:

141

Es gibt keinen syntaktischen Unterschied zwischen der Schnittstellenimplementierung und der Klassenvererbung . Listen Sie einfach alle durch Kommas getrennten Typen nach einem Doppelpunkt auf, :wie hier gezeigt:

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable

Die Vererbung mehrerer Klassen ist verboten, während mehrere Schnittstellen von einer einzelnen Klasse implementiert werden können.

s1m0nw1
quelle
1
Ist also die Reihenfolge wichtig, oder kümmert sich die Klammer darum, welches der Eltern und welche Schnittstellen sind?
SMBiggs
Ich kann mir keinen Grund vorstellen, warum Ordnung wichtig wäre. Ja, jede abstrakte Klasse benötigt Parens, während Schnittstellen ohne funktionieren. Der Compiler weiß, ob Sie eine Schnittstelle implementieren oder eine
Superklasse
2

Dies ist die allgemeine Syntax, die verwendet wird, wenn eine Klasse erweitert (eine andere Klasse) oder implementiert (eine oder mehrere Schnittstellen) wird:

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

Beachten Sie, dass die Reihenfolge der Klassen und Schnittstellen keine Rolle spielt.

Beachten Sie auch, dass sich die Klammer für die erweiterte Klasse, die wir verwenden, auf den Hauptkonstruktor der übergeordneten Klasse bezieht. Wenn der Hauptkonstruktor der übergeordneten Klasse ein Argument verwendet, sollte die untergeordnete Klasse dieses Argument ebenfalls übergeben.

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")
    }
}
Mr.Q.
quelle