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() // Иҷрои foo аз InterfaceA-ро даъват мекунад
super<InterfaceB>.foo() // Иҷрои foo аз InterfaceB-ро даъват мекунад
}
override fun bar() {
super<InterfaceB>.bar() // Иҷрои bar аз InterfaceB-ро истифода мебарад
}
}