Sobes.tech
Junior

Kuidas töötab pärimine Kotlinis?

sobes.tech AI

Vastus AI-lt

Kotlin pärandamine põhineb avatud klasside põhimõttel. Vaikimisi on kõik klassid suletud (final), ja klassi pärimiseks tuleb seda selgelt märkida võtmesõnaga open.

Peamised punktid:

  • Avatud klassid: Vanemklass peab olema märgitud kui open.
    open class Base {
        // ...
    }
    
  • Pärimine: Pärimine toimub kahe punkti (:) abil, millele järgneb vanemklassi nimi ja vajadusel selle konstruktor.
    class Derived : Base() {
        // ...
    }
    
  • Meetodite ja omaduste üle kirjutamine: Vanemklassi meetodite või omaduste üle kirjutamiseks tuleb need märkida open, ja pärilikus klassis kasutatakse override sõna.
    open class Base {
        open fun process() { /* ... */ }
        open val value: Int = 0
    }
    
    class Derived : Base() {
        override fun process() { /* ... */ }
        override val value: Int = 1
    }
    
    Kui vanemklass ei ole märgitud open, siis neid üle kirjutada ei saa.
  • Juurdepääs vanemklassi liikmetele: Juurdepääs vanemklassi liikmetele pärilikus klassis toimub super sõna abil.
    class Derived : Base() {
        override fun process() {
            super.process() // Vanemklassi meetodi kutsumine
            // ...
        }
    }
    
  • Konstruktorid: Kui vanemklassil on konstruktor parameetritega, peab päriliku klassi see konstruktor kutsuma oma deklaratsioonis.
    open class Base(name: String) {
        // ...
    }
    
    class Derived(name: String, age: Int) : Base(name) {
        // ...
    }
    
  • Liidesed: Klass võib rakendada mitmeid liideseid, mida saab märkida pärast päriliku klassi, eraldatud komaga. Liidesed on vaikimisi "avatud" rakendamiseks.
    interface MyInterface {
        fun doSomething()
    }
    
    class MyClass : Base(), MyInterface {
        override fun doSomething() { /* ... */ }
    }
    
  • Abstraktsed klassid: Abstraktsed klassid on mõeldud osalise rakenduse määratlemiseks ning sisaldavad abstraktseid meetodeid ja omadusi (abstract), mida peavad rakendama päriliku klassid. Abstraktsed liikmed ei nõua open. Abstraktne klass ei nõua ka open pärimiseks.
    abstract class AbsBase {
        abstract fun abstractMethod()
        open fun concreteMethod() { /* ... */ }
    }
    
    class AbsDerived : AbsBase() {
        override fun abstractMethod() { /* ... */ }
    }
    

Kokkuvõttes püüab Kotlin olla selge, nõudes open kasutamist pärimise ja üle kirjutamise lubamiseks.