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 օբյեկտին }ImplementingClass-ը ինքնուրույն չի իրականացնումperformAction, փոխարենը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` իրականացումը
}
}