Sobes.tech
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 колдонуу талап кылынат.