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 metod, czyli "override" w języku Kotlin!
Tweet |
"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:
- Jeśli przesłaniamy metodę, to musi mieć identyczny typ zwracanej wartości.
- 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#)!
"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.