Junior
როგორ მუშაობს მემკვიდრეობა Kotlin-ში?
sobes.tech AI
პასუხი AI-სგან
Kotlin-да мирас алу принципи ачык синфтарга негизделген. Алдын ала бардык синфтар жабык (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 колдонуу талап кылынат.