Kotlin'de aynı anda genişletin ve uygulayın


94

Java'da şu işlemleri yapabilirsiniz:

class MyClass extends SuperClass implements MyInterface, ...

Aynı şeyi Kotlin'de yapmak mümkün mü? Varsayım SuperClasssoyuttur ve uygulanmazMyInterface

Yanıtlar:


149

Arabirim uygulaması ile sınıf mirası arasında sözdizimsel bir fark yoktur . :Burada gösterildiği gibi tüm türleri iki nokta üst üste işaretinden sonra virgülle ayırarak listeleyin :

abstract class MySuperClass
interface MyInterface

class MyClass : MySuperClass(), MyInterface, Serializable

Birden çok sınıf kalıtımı yasaklanırken, birden çok arabirim tek bir sınıf tarafından uygulanabilir.


2
Öyleyse düzen önemli mi, yoksa parantez hangisinin üst ve hangilerinin arayüzler olduğuna mı bakıyor?
SMBiggs

Düzenin neden önemli olacağına dair bir neden düşünemiyorum. Evet, arabirimler olmadan çalışırken her soyut sınıfın parantezlere ihtiyacı olacaktır. Derleyici, bir arabirim uygulayıp uygulamadığınızı veya bir süper sınıfı genişletip genişletmediğinizi bilir
s1m0nw1

3

Bu, bir sınıf genişlerken (başka bir sınıf) veya uygularken (bir veya sunucu arabirimleri) kullanılacak genel sözdizimidir:

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

Sınıfların ve arayüzlerin sırasının önemli olmadığını unutmayın.

Ayrıca, genişletilmiş sınıf için parantez kullandığımıza dikkat edin, thee parantthesis, ana sınıfın ana yapıcısını ifade eder. Bu nedenle, ana sınıfın ana kurucusu bir argüman alırsa, çocuk sınıf da bu argümanı iletmelidir.

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")
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.