Junior
Kotlin'de arayüzlerin uygulanması nasıl yapılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin'de arabirimler implements anahtar kelimesi (Kotlin'de örtük, sadece iki nokta ile gösterilir) veya by anahtar kelimesi kullanılarak uygulanır.
Temel uygulama yolları:
- Doğrudan Uygulama: Nesne veya sınıf, tüm üyeleri doğrudan uygular.
Bir sınıfın başka bir sınıftan kalıtım alıp aynı anda arabirimleri uygulaması durumunda, sınıf önce belirtilir.interface MyInterface { fun doSomething() val myProperty: String } class MyClass : MyInterface { override fun doSomething() { println("MyClass içinde bir şey yapılıyor") } override val myProperty: String = "Merhaba" }open class BaseClass class AnotherClass : BaseClass(), MyInterface { override fun doSomething() { println("AnotherClass içinde bir şey yapılıyor") } override val myProperty: String = "Dünya" } - Uygulamanın Devredilmesi: Arabirimin uygulaması başka bir nesneye devredilir.
byanahtar kelimesi kullanılır. Bu, bileşim ve çoklu kalıtım sorunlarından kaçınmak için faydalıdır.Bu durumda,interface DelegatedInterface { fun performAction() } class DelegatedObject : DelegatedInterface { override fun performAction() { println("Eylem DelegatedObject tarafından gerçekleştirildi") } } class ImplementingClass(di: DelegatedInterface) : DelegatedInterface by di { // ImplementingClass, performAction() metodunun uygulamasını di nesnesine devreder }ImplementingClasskendi başınaperformAction'ı uygulamaz, bunun yerineperformingClass.performAction()çağrısıdi.performAction()'a yönlendirilir.
Birden fazla arabirimi aynı isimli üyelerle uygularken, çatışmaları çözmek için üyeyi açıkça yeniden tanımlamak ve hangi arabirimin uygulamasını alacağınızı belirtmek gerekir, <Arabirim>.<üye> sözdizimi kullanılarak.
interface InterfaceA {
fun foo() { println("InterfaceA") }
fun bar()
}
interface InterfaceB {
fun foo() { println("InterfaceB") }
fun bar() { println("InterfaceB bar") }
}
class ResolvingConflict : InterfaceA, InterfaceB {
override fun foo() {
super<InterfaceA>.foo() // InterfaceA'dan foo uygulamasını çağırır
super<InterfaceB>.foo() // InterfaceB'den foo uygulamasını çağırır
}
override fun bar() {
super<InterfaceB>.bar() // InterfaceB'den bar uygulamasını kullanır
}
}