Jason. Cała informatyka w jednym miejscu!

Jesteś gotowy(-a) na kolejną część materiału o języku Java 😄? Zaprezentuję Ci kolejne słowo kluczowe umożliwiające m.in. wywoływanie "pierwotnej" wersji przesłanianej metody. Jest nim "super" w języku Java. Ma to po części związek z wątkiem dziedziczenia, ale jaki konkretny to już zapraszam do środka!

"SUPER" W JĘZYKU JAVA. JEDNO SŁOWO, WIELE ZNACZEŃ

Czy kojarzysz słówko "super" 🙃? Musiało Ci się ukazać przed oczami chociaż parę razy. Jeżeli skupisz swoją uwagę na tym artykule, dołączysz do grona osób rozumiejących znaczenie tego słowa 😁. Tutaj stoimy na rozdrożu.

ODWOŁYWANIE SIĘ DO KLASY BAZOWEJ

Pierwsze znaczenie: odwoływanie się do metod i konstruktorów dotyczących klasy, od której się dziedziczy. Zakładając, że są dwie klasy posiadające tę samą metodę, jedna dziedziczy od drugiej i ta dziedzicząca od drugiej posiada przesłoniętą metodę o tej samej nazwie, to wyrażenia:

doSomething();

oraz

super.doSomething();

będą znaczyły coś innego. Pierwsze wywołanie spowoduje wykonanie instrukcji tej przesłoniętej metody, a drugie wywołanie spowoduje "powrócenie" do klasy, od której się dziedziczy, wyszukanie tej samej metody i wykonanie instrukcji znajdujących się w klasie bazowej (nadrzędnej)! Dziedziczenie pozwala posunąć się dalej przez co można połączyć jedno z drugim i dzięki temu wykonać parę własnych instrukcji w przesłoniętej metodzie ORAZ wykonać "pierwowzór" za jednym zamachem 😎! Konkretnie, to chodzi mi o to:

public class ChildClass extends BaseClass {
	@Override
	public void doSomething() {
		super.doSomething();
		// własne instrukcje
	}
}
KONSTRUKTOR KLASY BAZOWEJ

Wspomniałem też coś o konstruktorach: owszem. To również dotyczy konstruktorów i one też mają związek ze słowem "super" w języku Java 😊. Wówczas mamy do czynienia z wywołaniem konstruktora klasy bazowej zgodnego z listą parametrów!

public class ChildClass extends BaseClass {
	public ChildClass() {
		super();	// wywołanie konstruktora bezargumentowego (jeżeli nie istnieje, błąd kompilacji!)
	}
}

Są dwie zasady, których musimy przestrzegać. Po pierwsze, wywołanie konstruktora klasy bazowej musi być pierwszą instrukcją w konstruktorze klasy, która ją wywołuje, a po drugie, używamy samego słowa "super" wraz z parą nawiasów okrągłych dla parametrów. Nie piszemy nazwy klasy jak przy tworzeniu instancji ⛔!

Tak na marginesie jeszcze dopiszę, że "łańcuch" wywołań konstruktorów nie kończy się na naszej klasie "najbardziej ogólnej", tylko na "ukrytej" klasie "Object", "matce" wszystkich obiektów. W chwili tworzenia własnej klasy, wykonywane jest niejawne rozszerzanie o klasę "Object", tak samo jakbyśmy dopisali "extends Object" i to się dzieje za każdym razem, jeżeli nie rozszerzamy jawnie o inną klasę ✅. Zatem to:

public class MyClass

jest równoznaczne z tym:

public class MyClass extends Object

KONTRAWARIANCJA

Drugie znaczenie: kontrawariancja typu generycznego. A że dotyczy to typów generycznych, zachęcam do poczytania o teorii stosowania typów generycznych. Mogłeś(-aś) zobaczyć słowo "super" w języku Java wewnątrz nawiasów kątowych. Coś takiego jak to:

ArrayList< ? super Integer> list = new ArrayList<Object>();

Znak zapytania znany jest pod hasłem "wildcard", czyli "znak wieloznaczny" w znaczeniu dosłownym. Zapis wstawiony powyżej oznaczać będzie ograniczenie nadtypu, czyli możliwość wstawienia typu klasy od podanego, do jej klasy bazowej, którą na końcu zawsze będzie "Object". To tylko jedna z różnic, a po szczegóły zapraszam do załączonego artykułu.

Słowo kluczowe "super" w języku Java

"super" w języku Java umożliwia sięgnięcie "wstecz" do klasy nadrzędnej i wywołanie tamtejszych metod lub konstruktorów. Słowo kluczowe można też znaleźć podczas definiowania kontrawariancji z użyciem typu wieloznacznego ("wildcard").


Oto dwa miejsca występowania słowa kluczowego "super". Rozumiem, jeżeli to drugie mogło Cię przerazić z racji tego, że poniekąd wyprzedziłem materiał jaki mam przewidziany w programie 😝. Niemniej jednak zachęcam do zainteresowania się typami generycznymi, one naprawdę potrafią ułatwić życie 😄!

NASTĘPNY ARTYKUŁ: Archiwum JAR w języku Java. Uruchamianie z wiersza poleceń

PODOBNE ARTYKUŁY