Junior
Ako funguje dedičstvo v Kotlin?
sobes.tech AI
Odpoveď od AI
Dedičnosť v Kotlin je založená na princípe otvorených tried. Predvolene sú všetky triedy uzavreté (final), a aby bola trieda dediťelná, musí byť výslovne označená kľúčovým slovom open.
Hlavné body:
- Otvorné triedy: Trieda rodiča musí byť označená ako
open.open class Base { // ... } - Dedičstvo: Dedičstvo sa vykonáva pomocou dvojbodky (
:), za ktorou nasleduje názov rodičovskej triedy a, ak je to potrebné, volanie jej konštruktora.class Derived : Base() { // ... } - Prepisovanie metód a vlastností: Na prepisovanie metód alebo vlastností rodičovskej triedy musia byť tieto označené v rodičovskej triede ako
open, a v odvodenom triede je potrebné použiť kľúčové slovooverride.Ak rodičovská metóda alebo vlastnosť neboli označené akoopen class Base { open fun process() { /* ... */ } open val value: Int = 0 } class Derived : Base() { override fun process() { /* ... */ } override val value: Int = 1 }open, nemôžu byť prepísané. - Prístup k členom rodičovskej triedy: Prístup k členom rodičovskej triedy z odvodeného triedy sa vykonáva pomocou kľúčového slova
super.class Derived : Base() { override fun process() { super.process() // Volanie metódy rodičovskej triedy // ... } } - Konštruktory: Ak má rodičovská trieda konštruktor s parametrami, odvodená trieda musí tento konštruktor volať v svojej deklarácii.
open class Base(name: String) { // ... } class Derived(name: String, age: Int) : Base(name) { // ... } - Rozhrania: Trieda môže implementovať viac rozhraní, ktoré je možné uviesť za dedičnou triedou oddelené čiarkou. Rozhrania sú predvolene "otvorené" na implementáciu.
interface MyInterface { fun doSomething() } class MyClass : Base(), MyInterface { override fun doSomething() { /* ... */ } } - Abstraktné triedy: Abstraktné triedy slúžia na definovanie čiastočnej implementácie a obsahujú abstraktné metódy a vlastnosti (označené
abstract), ktoré musia byť implementované v odvodených triedach. Abstraktné členy nevyžadujúopen. Abstraktná trieda tiež nevyžadujeopenna dedenie.abstract class AbsBase { abstract fun abstractMethod() open fun concreteMethod() { /* ... */ } } class AbsDerived : AbsBase() { override fun abstractMethod() { /* ... */ } }
Celkovo Kotlin smeruje k jasnosti, vyžadujúc použitie open na povolenie dedenia a prepisovania.