Junior
Kotlinде интерфейстердин ишке ашырылышы кандай болот?
sobes.tech AI
AIден жооп
Kotlin-деги интерфейстер implements ачкыч сөзү менен (Kotlinде жасалма, эки нүкте аркылуу көрсөтүлөт) же by аркылуу делегирлөө менен ишке ашырылат.
Негизги ишке ашыруу жолдору:
- Түз ишке ашыруу: Объект же класс интерфейсинин бардык мүчөлөрүн түздөн-түз ишке ашырат.
Класс мурас алууда жана интерфейстерди ишке ашырууда бирдей, биринчи орунда көрсөтүлөт.interface MyInterface { fun doSomething() val myProperty: String } class MyClass : MyInterface { override fun doSomething() { println("Doing something in MyClass") } override val myProperty: String = "Hello" }open class BaseClass class AnotherClass : BaseClass(), MyInterface { override fun doSomething() { println("Doing something in AnotherClass") } override val myProperty: String = "World" } - Ишке ашыруу делегаттары: Интерфейс ишке ашыруу башка объектке делегирленет.
byачкыч сөзү колдонулат. Бул композиция үчүн жана көп мурас алуунун көйгөйлөрүнөн качуу үчүн пайдалуу.Бул учурдаinterface DelegatedInterface { fun performAction() } class DelegatedObject : DelegatedInterface { override fun performAction() { println("Action performed by DelegatedObject") } } class ImplementingClass(di: DelegatedInterface) : DelegatedInterface by di { // ImplementingClass performAction() методунун ишке ашырылышын di объектисине делегирлейт }ImplementingClassperformActionти өзү ишке ашырбайт, тескерисинчеperformingClass.performAction()чакыруусуdi.performAction()ке багытталат.
Көптөгөн интерфейстерди бир мезгилде ишке ашырганда, конфликттерди чечүү керек, мүчөнү так кайра аныктап жана кайсы интерфейстен алынганын көрсөтүү керек, <Интерфейс>.<член> синтаксисин колдонуу менен:
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дан foo реализациясын чакырабыз
super<InterfaceB>.foo() // InterfaceBдан foo реализациясын чакырабыз
}
override fun bar() {
super<InterfaceB>.bar() // InterfaceBдан bar реализациясын колдонуп жатабыз
}
}