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 барои иҷозат додан ба мерос ва пешбарӣ талаб карда шавад.