Junior
Cum funcționează moștenirea în Kotlin?
sobes.tech AI
Răspuns de la AI
Moștenirea în Kotlin se bazează pe principiul claselor deschise. În mod implicit, toate clasele sunt închise (final), iar pentru a face o clasă moștenibilă, trebuie să fie marcată explicit cu cuvântul cheie open.
Puncte cheie:
- Clase deschise: Clasa de bază trebuie să fie marcată ca
open.open class Base { // ... } - Moștenire: Moștenirea se face cu ajutorul două puncte (
:), urmat de numele clasei de bază și, dacă este necesar, apelul constructorului acesteia.class Derived : Base() { // ... } - Suprascrierea metodelor și proprietăților: Pentru a suprascrie metode sau proprietăți ale clasei de bază, acestea trebuie să fie marcate ca
openîn clasa de bază, iar în clasa derivată se folosește cuvântul cheieoverride.Dacă metoda sau proprietatea clasei de bază nu este marcată caopen class Base { open fun process() { /* ... */ } open val value: Int = 0 } class Derived : Base() { override fun process() { /* ... */ } override val value: Int = 1 }open, nu poate fi suprascrisă. - Accesul la membrii clasei de bază: Accesul la membrii clasei de bază din clasa derivată se face cu ajutorul cuvântului cheie
super.class Derived : Base() { override fun process() { super.process() // Apelul metodei clasei de bază // ... } } - Constructorii: Dacă clasa de bază are un constructor cu parametri, clasa derivată trebuie să apeleze acest constructor în semnătura sa.
open class Base(name: String) { // ... } class Derived(name: String, age: Int) : Base(name) { // ... } - Interfețe: O clasă poate implementa mai multe interfețe, iar acestea pot fi indicate separate prin virgulă după clasa de bază (dacă există). Interfețele sunt, implicit, "deschise" pentru implementare.
interface MyInterface { fun doSomething() } class MyClass : Base(), MyInterface { override fun doSomething() { /* ... */ } } - Clase abstracte: Clasele abstracte sunt utilizate pentru a defini o implementare parțială și conțin metode și proprietăți abstracte (marcate cu
abstract) care trebuie implementate în clasele derivate. Membrii abstracti nu necesităopen. Clasa abstractă nu necesită, de asemenea,openpentru moștenire.abstract class AbsBase { abstract fun abstractMethod() open fun concreteMethod() { /* ... */ } } class AbsDerived : AbsBase() { override fun abstractMethod() { /* ... */ } }
În general, Kotlin tinde spre claritate, cerând utilizarea open pentru a permite moștenirea și suprascrierea.