Junior
Kaip veikia paveldėjimas Kotlin?
sobes.tech AI
Atsakymas iš AI
Kotlin paveldėjimas grindžiamas atvirų klasių principu. Pagal numatytuosius nustatymus visos klasės yra uždaros (final), ir kad klasė būtų paveldima, ją reikia aiškiai pažymėti raktažodžiu open.
Pagrindiniai punktai:
- Atviros klasės: Tėvinė klasė turi būti pažymėta kaip
open.open class Base { // ... } - Paveldėjimas: Paveldėjimas vyksta naudojant dvitaškį (
:), po kurio nurodomas tėvinės klasės pavadinimas ir, jei reikia, jos konstruktoriaus iškvietimas.class Derived : Base() { // ... } - Perrašymas metodų ir savybių: Norint perrašyti tėvinės klasės metodus ar savybes, jie turi būti pažymėti kaip
open, o paveldinčioje klasėje naudojamasoverridežodis.Jei tėvinės klasės metodas ar savybė nėra pažymėti kaipopen class Base { open fun process() { /* ... */ } open val value: Int = 0 } class Derived : Base() { override fun process() { /* ... */ } override val value: Int = 1 }open, juos perrašyti neįmanoma. - Prieiga prie tėvinės klasės narių: Prieiga prie tėvinės klasės narių iš paveldimos klasės vyksta naudojant žodį
super.class Derived : Base() { override fun process() { super.process() // Tėvinės klasės metodo iškvietimas // ... } } - Konstruktoriai: Jei tėvinės klasės konstruktorius turi parametrus, paveldinti klasė turi jį iškviesti savo deklaracijoje.
open class Base(name: String) { // ... } class Derived(name: String, age: Int) : Base(name) { // ... } - Sąsajos: Klasė gali įgyvendinti kelias sąsajas, kurias galima nurodyti po paveldimos klasės, atskirtos kableliu. Sąsajos pagal numatytuosius nustatymus yra "atviros" įgyvendinimui.
interface MyInterface { fun doSomething() } class MyClass : Base(), MyInterface { override fun doSomething() { /* ... */ } } - Abstraktūs klasės: Abstraktūs klasės naudojamos dalinės įgyvendinimo apibrėžimui ir turi abstrakčius metodus bei savybes (
abstract), kuriuos turi įgyvendinti paveldimos klasės. Abstraktūs nariai nereikalaujaopen. Abstrakti klasė taip pat nereikalaujaopenpaveldėjimui.abstract class AbsBase { abstract fun abstractMethod() open fun concreteMethod() { /* ... */ } } class AbsDerived : AbsBase() { override fun abstractMethod() { /* ... */ } }
Apskritai, Kotlin siekia aiškumo, reikalaujant naudoti open leidžiant paveldėjimą ir perrašymą.