Perluas dan implementasikan secara bersamaan di Kotlin

94

Di Java, Anda bisa melakukan hal seperti:

class MyClass extends SuperClass implements MyInterface, ...

Apakah mungkin melakukan hal yang sama di Kotlin? Asumsi SuperClassabstrak dan tidak diimplementasikanMyInterface

chntgomez.dll
sumber

Jawaban:

149

Tidak ada perbedaan sintaksis antara implementasi antarmuka dan pewarisan kelas . Cukup daftarkan semua jenis dengan dipisahkan koma setelah titik dua :seperti yang ditunjukkan di sini:

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable

Pewarisan beberapa kelas dilarang sementara banyak antarmuka dapat diimplementasikan oleh satu kelas.

s1m0nw1
sumber
2
Jadi apakah urutan itu penting, atau apakah tanda kurung mengurus yang merupakan induk dan yang mana antarmuka?
SMBiggs
Saya tidak bisa memikirkan alasan mengapa keteraturan itu penting. Ya, setiap kelas abstrak akan membutuhkan tanda kurung sementara antarmuka bekerja tanpa. Kompilator mengetahui apakah Anda mengimplementasikan antarmuka atau memperluas kelas super
s1m0nw1
3

Ini adalah sintaks umum yang digunakan ketika sebuah kelas diperluas (kelas lain) atau diimplementasikan (satu atau antarmuka serveral):

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

Perhatikan bahwa urutan kelas dan antarmuka tidak menjadi masalah.

Juga, perhatikan bahwa untuk kelas yang diperpanjang kita menggunakan tanda kurung, tanda kurung mengacu pada konstruktor utama dari kelas induk. Oleh karena itu, jika konstruktor utama kelas induk mengambil argumen, maka kelas anak juga harus meneruskan argumen itu.

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")
    }
}
Tuan Q
sumber