Witajcie! To już dwudziesty pierwszy artykuł dotyczący języka Kotlin, a na dzisiaj przyszykuję Was do poznania kolejnego słowa kluczowego, które tym razem istnieje w paru innych językach i nie jest żadnym "exclusive". Oto przesłanianie właściwości i funkcji, czyli "override" w języku Kotlin!

"OVERRIDE" W JĘZYKU KOTLIN KOLEJNYM ZAPOŻYCZENIEM Z INNYCH JĘZYKÓW

Jeśli kojarzycie język C#, to macie ułatwione zadanie. W Kotlinie występuje to samo zastosowanie, ale i tak o nim wspomnę, aby każdy miał jasność po co to, do czego to. "override" oznacza dosłownie "nadpisywanie" jednak w przypadku dziedziczenia i tych spraw, stosuje się raczej termin "przesłanianie". A czego ma dotyczyć to przesłanianie? Danych składowych i metod klas bazowych, moi mili.

SPOSÓB UŻYCIA DLA WŁAŚCIWOŚCI

Aby w ogóle dyskutować o przesłanianiu, musicie wpierw zadbać o to, aby inna klasa i właściwość która ma być modyfikowana, były otworzone. Potem możecie przejść do poniższych wyjaśnień.

"override" w języku Kotlin stosuje się następująco. Pierwszym krokiem jest odziedziczenie od klasy otworzonej, bądź abstrakcyjnej:

class Rectangle : Shape()

dodanie słówka "override" przed słowem definicji zmiennej ("var" lub "val") i wprowadzenie nowej wartości zgodnej z typem właściwości w klasie bazowej lub typem pochodnym:

override val attribute = 18

Ponieważ został wspomniany C#, będę porównywać to do dwóch języków: do Javy i do C#. W języku Java, mieliśmy jedynie możliwość zdefiniowania pseudo "getter’ów" i "setter’ów", tylko po to aby uzyskać dostęp do właściwości od strony klasy pochodnej:

public void setAttribute(int attribute)
{
	this.attribute = attribute;
}

public int getAttribute()
{
	return attribute;
}

C# posiada już dużo lepsze rozwiązanie, mianowicie korzystanie z prawdziwych właściwości "get" i "set":

public int Attribute {get; set;}

Można też nadać modyfikator "protected" i to zapewni dostępność dla każdej następnej klasy pochodnej, ale na zewnątrz będzie cały czas ukryte. Proponuję to rozwiązanie tylko w języku C#, gdyż w Javie "protected" działa nieco inaczej niż tutaj (zapewnia "widoczność" właściwości również na zewnątrz klasy, jeśli obie znajdują się w tym samym pakiecie):

protected int attribute;

Tak czy inaczej, w klasie pochodnej wystarczy zrobić powyższy myk i jesteście w domu. Miejcie świadomość, że domyślnym modyfikatorem dostępu w Kotlinie jest publiczny, zatem to wszystko i tak będzie widoczne jak na tacy.

SPOSÓB UŻYCIA DLA METOD

Teraz metody. Początek jest ten sam, tylko co do przesłaniania funkcji, "override" w języku Kotlin stosuje się następująco. Najpierw "otwiera się" metodę w klasie bazowej celem sygnalizacji możliwości przesłaniania. Potem w klasie pochodnej wykonujemy coś takiego:

override fun doSomething()
{

}

Dwie zasady:

  1. Jeśli przesłaniamy metodę, to musi mieć identyczny typ zwracanej wartości.

  2. Jeśli przesłaniamy metodę, to musi się pokrywać liczba, kolejność i typy parametrów.

Jak było w Javie? A pamiętacie adnotację "@Override"? No właśnie:

@Override
public void doSomething()
{

}

Od biedy może też być "protected". A C# tak:

protected override void doSomething()
{

}

W tym języku nie zapominajcie o obowiązującym słowie kluczowym "virtual" zamiast "open", żeby klasa bazowa udostępniała przesłanianie (dotyczy to tylko metod w C#)!

Słowo kluczowe "override" w języku Kotlin

"override" w języku Kotlin służy do przesłaniania już otwartych lub abstrakcyjnych danych składowych i metod nadając nową wartość lub treść funkcji klasom pochodnym.


Słowo "override" zrealizowane. Przechodzimy do następnego.

PODOBNE ARTYKUŁY