Ի՞նչ առանձնահատկություններ կան 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 | Աշխատում է ինտերֆեյսների միջոցով |
Դելեգացիան հաճախ նախընտրելի է ժառանգությունից՝ ճկունություն ձեռք բերելու և "խոցելի հիմնական դաս" խնդիրներից խուսափելու համար։