Sobes.tech
Junior

Jak odbywa się dziedziczenie w języku Kotlin?

sobes.tech AI

Odpowiedź od AI

Dziedziczenie w Kotlin opiera się na słowach kluczowych open i override. Klasy i metody domyślnie są final, co oznacza, że nie można ich dziedziczyć ani nadpisywać. Aby umożliwić dziedziczenie, klasa lub metoda musi być oznaczona modyfikatorem open.

Aby utworzyć klasę pochodną, używa się dwukropka : po nazwie klasy bazowej, po którym następuje nazwa klasy bazowej z jej konstruktorem.

open class Base(val name: String) {
    open fun greet() {
        println("Cześć, $name")
    }
}

Aby nadpisać metodę klasy bazowej w klasie pochodnej, używa się modyfikatora override.

class Derived(name: String) : Base(name) {
    override fun greet() {
        println("Pozdrowienia, $name")
    }
}

Jeśli klasa bazowa ma konstruktor z parametrami, klasa pochodna musi go wywołać za pomocą słowa kluczowego super.

Kotlin obsługuje wielokrotne dziedziczenie interfejsów, ale nie klas. Klasa może dziedziczyć tylko po jednej klasie.

Klasa może również oznaczyć swoich członków jako protected, internal lub private, ograniczając ich widoczność dla klas pochodnych lub w obrębie modułu.

Klasy abstrakcyjne są deklarowane za pomocą słowa kluczowego abstract. Mogą zawierać zarówno metody abstrakcyjne (bez implementacji), jak i zwykłe. Metody abstrakcyjne nie potrzebują słowa open, ponieważ domyślnie są nadpisywane. Klasy abstrakcyjne nie mogą być bezpośrednio instancjonowane.

abstract class Shape {
    abstract fun draw()
    open fun printInfo() {
        println("To jest kształt.")
    }
}

W ten sposób dziedziczenie w Kotlinie jest wyraźnie kontrolowane za pomocą modyfikatorów open i override, co poprawia czytelność i zapobiega niepożądanemu dziedziczeniu.