Junior
Kotlin-də interfeyslərin həyata keçirilməsi necədir?
sobes.tech Süni İntellekt
AI-dan cavab
Kotlin-də interfeyslər implements açar sözü ilə (Kotlin-də qismən, sadəcə iki nöqtə ilə göstərilir) və ya by ilə vəkilçilik istifadə edilərək həyata keçirilir.
Əsas həyata keçirmə üsulları:
- Birbaşa həyata keçirmə: Obəkt və ya sinif birbaşa bütün interfeys üzvlərini həyata keçirir.
Bir sinifdən irs alma və eyni zamanda interfeysləri həyata keçirmə zamanı, sinif əvvəl göstərilir.interface MyInterface { fun doSomething() val myProperty: String } class MyClass : MyInterface { override fun doSomething() { println("MyClass-də bir şey edir") } override val myProperty: String = "Salam" }open class BaseClass class AnotherClass : BaseClass(), MyInterface { override fun doSomething() { println("AnotherClass-də bir şey edir") } override val myProperty: String = "Dünya" } - Həvalə edilən həyata keçirmə: Interfeysin həyata keçirilməsi başqa bir obyektə həvalə edilir.
byaçar sözü istifadə olunur. Bu, kompozisiya və çox irs alma problemlərindən qaçmaq üçün faydalıdır.Bu halda,interface DelegatedInterface { fun performAction() } class DelegatedObject : DelegatedInterface { override fun performAction() { println("Hərəkət DelegatedObject tərəfindən yerinə yetirilir") } } class ImplementingClass(di: DelegatedInterface) : DelegatedInterface by di { // ImplementingClass, performAction() metodunun həyata keçirilməsini di obyektinə həvalə edir }ImplementingClassperformAction-ı öz-özünə həyata keçirmir, əvəzindəperformingClass.performAction()çağırışıdi.performAction()-a yönəldilir.
Bir neçə interfeysə eyni adlı üzvlərlə həyata keçirmə zamanı, münaqişələri həll etmək üçün üzvü açıq şəkildə yenidən təyin etmək və hansı interfeysə aid olduğunu göstərmək lazımdır, <Interfeys>.<üzv> sintaksisi istifadə edilərək.
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-nun həyata keçirilməsini çağırır
super<InterfaceB>.foo() // InterfaceB-dan foo-nun həyata keçirilməsini çağırır
}
override fun bar() {
super<InterfaceB>.bar() // InterfaceB-dən bar-ın həyata keçirilməsini istifadə edir
}
}