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