Dziedziczenie jest centralnym pojęciem w programowaniu obiektowym (OOP) i często uważane jest za jeden z fundamentów zwiększania efektywności. W tym samouczku pogłębisz swoją wiedzę na temat dziedziczenia w Java. Nauczysz się, jak zarządzać modyfikatorami dostępu, korzystać z konstruktorów oraz jaką rolę odgrywa enkapsulacja w dziedziczeniu.
Najważniejsze wnioski
- Dziedziczenie umożliwia dziedziczenie właściwości i metod klasy.
- Modyfikator dostępu private ogranicza dostęp do zmiennych lub metod, podczas gdy protected umożliwia rozszerzony dostęp wewnątrz klas dziedziczących z pierwotnej klasy.
- Konstruktory muszą być wywoływane w podklasie, aby poprawnie zainicjować obiekty.
- Metody interfejsu można uogólniać, gdy istnieje wiele specyficznych klas.
Instrukcja krok po kroku
Modyfikatory dostępu: protected vs. private
Jeśli w klasie takiej jak Pojazd zadeklarujesz zmienną (np. kolor) jako protected, możesz używać tej zmiennej bezpośrednio w klasie dziedziczącej (np. Samochód). Jeśli jednak zadeklarujesz zmienną jako private, w podklasie nie będziesz miał do niej bezpośredniego dostępu.

To konkretne oznacza, że dostęp do zmiennych private możliwy jest tylko przez metody setter i getter.
Przykład pokazuje, że musimy użyć setFarbe i getFarbe, aby uzyskać dostęp do prywatnej zmiennej color.

Jeśli zmienna jest zadeklarowana jako protected, możesz po prostu uzyskać do niej dostęp w klasie Samochód i zmienić wartość.
Użycie konstruktorów w dziedziczeniu
Podczas definiowania podklasy musisz upewnić się, że konstruktor klasy nadrzędnej jest poprawnie wywoływany.

Zapewnia to, że kolor jest poprawnie inicjowany podczas tworzenia obiektu Samochód.

Upewnij się, że definiujesz konstruktor w podklasie, który odpowiednio przekazuje parametry klasy nadrzędnej.
Dziedziczenie i wywołania metod
Dwie klasy, Pojazd i Samochód, umożliwiają korzystanie z ogólnych zmiennych i metod. Jeśli zdefiniujesz metodę w Pojazd, możesz użyć tej metody również w Samochód, nie pisząc jej ponownie.

Wywołuje się tutaj metoda fahrzeugFarbeAusgeben, która wypisuje kolor uzyskany za pomocą metody getFarbe.
Ograniczenia przy wywoływaniu metod
Jeśli próbujesz wywołać metodę w podklasie, która nie jest dostępna dla tej klasy, otrzymasz błąd kompilacji. W naszym przykładzie obiekt Pojazd musi być przekazany, aby wywołać metodę getFarbe.

Oznacza to praktycznie, że musisz upewnić się, że metoda odpowiada twojemu typowi danych przed jej wywołaniem. Możesz więc przekazać rower, samochód lub oba do metody, która oczekuje jedynie obiektów Pojazd.
Przykład wywołania metod instancji w kontekstach statycznych
Warto zauważyć, że w metodach statycznych (static) nie można używać słowa kluczowego this, ponieważ nie odnosi się ono do konkretnej instancji. W takich przypadkach warto rozważyć użycie innej metody lub przekształcenie logiki.

Dzięki temu wywołaniu kolor dla obiektu meinAuto zostanie poprawnie wypisany.
Podsumowanie - Dziedziczenie w Java: Przewodnik dla początkujących
Dziedziczenie jest ważnym pojęciem w programowaniu w Java, które pomaga w modularizacji i ponownym wykorzystaniu kodu. W tym samouczku poznałeś podstawy modyfikatorów dostępu, konstruktorów i wywołań metod w kontekście dziedziczenia.
Najczęściej zadawane pytania
Jak mogę uzyskać dostęp do prywatnych zmiennych w podklasie?Do prywatnych zmiennych w podklasie nie można uzyskać dostępu bezpośrednio. Użyj metod getter i setter.
Jaka jest różnica między protected a private?protected pozwala na dostęp w podklasie i w tym samym pakiecie, podczas gdy private jest dostępny tylko wewnątrz własnej klasy.
Czy muszę definiować konstruktory w podklasie?Tak, jeśli dostosowałeś konstruktor klasy nadrzędnej, musisz również odpowiednio zdefiniować konstruktory w podklasie.
Czy mogę swobodnie nadpisywać metody klas nadrzędnych w klasach podrzędnych?Tak, możesz nadpisywać metody, które nie są oznaczone jako final lub static, w podklasie, aby zaimplementować specyficzne zachowanie.