Junior
Kako se implementiraju interfejsi u Kotlinu?
sobes.tech АИ
Одговор од АИ
Интерфејси у 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() // Позивамо реализацију foo из InterfaceA
super<InterfaceB>.foo() // Позивамо реализацију foo из InterfaceB
}
override fun bar() {
super<InterfaceB>.bar() // Користимо реализацију bar из InterfaceB
}
}