Sobes.tech
Middle

Ի՞նչ առանձնահատկություններ կան Kotlin-ում ժառանգության և ներկայացման հետ աշխատելու համար։

sobes.tech AI

Պատասխան AI-ից

Kotlin- ում ժառանգությունը ըստ նախնական կարգավորման փակ է (final), և դասերը և մեթոդները պետք է հստակ նշվեն որպես open, որպեսզի հնարավոր լինի ժառանգել և վերագրել։ Միայն մեկ դասից ժառանգություն է աջակցվում, բայց կարող են իրականացվել մի քանի ինտերֆեյսներ:

Ժառանգության ժամանակ, հիմնական դասի կոնստրուկտորը կանչվում է ստորաբաժանման կոնստրուկտորից հետո:

open class Base(val name: String) {
    init { println("Base-ի ինիցիալիզացիա") }
    open fun greeting() { println("Բարև Base-ից") }
}

class Derived(name: String, val age: Int) : Base(name) {
    init { println("Derived-ի ինիցիալիզացիա") }
    override fun greeting() { println("Բարև Derived-ից") }
}

Kotlin- ում դելեգացիան իրականացվում է լեզվի մակարդակում by բանալի բառի միջոցով։ Դա թույլ է տալիս փոխանցել ինտերֆեյսի իրականացմանը այլ օբյեկտ։ Սա հարմար տարբերակ է ուղղակի ժառանգության փոխարեն։

interface Greeter {
    fun greet(name: String)
}

class GreeterImpl : Greeter {
    override fun greet(name: String) {
        println("Բարև, $name!")
    }
}

class DelegateGreeter(greeter: Greeter) : Greeter by greeter

Այստեղ, DelegateGreeter դելեգատոր է greet մեթոդի կանչը greeter օբյեկտին:

Գծագիր Ժառանգություն Դելեգացիա (by)
Կապ "է մի բան" (is a) "ունի մի" (has a)
Իրականացում Ուղիղ ընդլայնում դասի Իրականացման փոխանցում օբյեկտին
Բազմապատկում Մեկ հիմնական դաս Մեծաթիվ ինտերֆեյսներ
Լայնություն Փոքր ավելի լայն Ավելի լայն, կոմպոզիցիայի միջոցով
Տեսանելիություն ժառանգում protected և public Աշխատում է ինտերֆեյսների միջոցով

Դելեգացիան հաճախ նախընտրելի է ժառանգությունից՝ ճկունություն ձեռք բերելու և "խոցելի հիմնական դաս" խնդիրներից խուսափելու համար։