Junior
Ինչպես է աշխատում ժառանգությունը Kotlin-ում?
sobes.tech AI
Պատասխան AI-ից
Կոտլինում ժառանգությունը հիմնված է բաց դասերի սկզբունքի վրա: Դեպքում, բոլոր դասերը փակ են (final), և որպեսզի դասը ժառանգելի լինի, այն պետք է հստակ նշվի open բանալի բառով:
Հիմնական կետեր՝
- Բաց դասեր: Հայրական դասը պետք է նշվի որպես
open:open class Base { // ... } - Ժառանգություն: Ժառանգությունը կատարվում է
:նշանի միջոցով, որի հետո նշվում է հայրական դասի անունը և, անհրաժեշտության դեպքում, նրա կոնստրուկտորի կանչը:class Derived : Base() { // ... } - Մեթոդների և հատկությունների վերագրում: Հայրական դասի մեթոդներն ու հատկությունները պետք է նշվեն որպես
open, իսկ ժառանգական դասում օգտագործվում էoverrideբանալի բառը:Եթե հայրական մեթոդը կամ հատկությունը նշված չէopen class Base { open fun process() { /* ... */ } open val value: Int = 0 } class Derived : Base() { override fun process() { /* ... */ } override val value: Int = 1 }open, այն չի կարող վերագրել: - Հայրական դասի անդամներին մուտք գործելը: Մուտք գործել հայրական դասի անդամներին ժառանգական դասից կատարվում է
superբանալի բառով:class Derived : Base() { override fun process() { super.process() // Հայրական դասի մեթոդի կանչ // ... } } - Կոնստրուկտորներ: Եթե հայրական դասի կոնստրուկտորը պարամետրեր ունի, ժառանգական դասը պետք է կանչի այդ կոնստրուկտորը իր հայտարարության մեջ:
open class Base(name: String) { // ... } class Derived(name: String, age: Int) : Base(name) { // ... } - Ինտերֆեյսներ: Դասը կարող է իրականացնել մի քանի ինտերֆեյսներ, որոնք նշվում են ժառանգվող դասից հետո, բաժանված ստորակետով: Ինտերֆեյսները ըստ նախնական կարգի "բաց" են իրականացման համար:
interface MyInterface { fun doSomething() } class MyClass : Base(), MyInterface { override fun doSomething() { /* ... */ } } - Աբստրակտ դասեր: Աբստրակտ դասերը օգտագործվում են մասամբ իրականացման սահմանման համար և պարունակում են աբստրակտ մեթոդներ և հատկություններ (նշված
abstract), որոնք պետք է իրականացվեն ժառանգվող դասերում: Աբստրակտ անդամները չեն պահանջումopen։ Աբստրակտ դասը նույնպես չի պահանջումopenժառանգության համար:abstract class AbsBase { abstract fun abstractMethod() open fun concreteMethod() { /* ... */ } } class AbsDerived : AbsBase() { override fun abstractMethod() { /* ... */ } }
Ընդհանուր առմամբ, Kotlin-ը ձգտում է հստակության, պահանջելով open օգտագործել ժառանգության և վերագրումների թույլտվության համար։