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

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.


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")
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.