Dziedziczenie (informatyka)

Dziedziczenie (informatyka)
Polecane artykuły

Dziedziczenie (ang. inheritance) jest jedną z najważniejszych części języków programowania zorientowanych obiektowo. Umożliwia ono kreowanie nowych klas, które opierają się na klasach już istniejących. Nowo utworzona klasa otrzymuje od klasy bazowej zmienne oraz metody a także rozszerza swoje możliwości poprzez dodanie własnych pól i metod.[1]

Ciekawostką dla początkowych programistów jest fakt, iż dziedziczenie wykorzystywane jest zawsze wtedy gdy tworzymy nową klasę. Jeśli bowiem nie dziedziczymy bezpośrednio z innej klasy to robimy to automatycznie - z klasy bazowej Object.[2]

Składnia dziedziczenia (Java)

Aby uruchomić mechanizm dziedziczenia w języku Java tworząc nową klasę po słowie class oraz nazwie klasy musimy zawrzeć słowo kluczowe extends (rozszerza). Po nim należy umieścić nazwę klasy bazowej. Po wykonaniu powyższych czynności nowa klasa otrzymuje zmienne oraz metody klasy macierzystej.[3]

Przykład:

public class Example extends BasicClass {
...
ciało klasy
...
}

Modyfikatory dostępu

W niektórych językach programowania dostępne są możliwości ograniczające widoczność elementów dziedziczonych w ramach klasy pochodnej. Wyróżnia się trzy typy modyfikatorów:

  • public – dostęp do elementu poprzedzonego modyfikatorem public pozwala na swobodne korzystanie z danego składnika zarówno z wnętrza jak i spoza klasy, w której jest zawarty
  • private – dostęp do elementu składowego klasy oznaczonego jako private możliwy jest jedynie z wnętrza metod tej klasy
  • protected – dostęp do składnika możliwy jest jedynie z klas dziedziczących oraz klas zawartych w tym samym pakiecie[4]

Rodzaje klas

Klasa już istniejąca, z której dziedziczymy za pomocą słowa kluczowego extends nazywana jest na trzy sposoby: nadklasą, klasą macierzystą bądź też klasą bazową. W przypadku nowopowstałych klas możemy się spotkać z terminami: klasa pochodna, klasa potomna oraz podklasa.

Należy zwrócić uwagę na występującą zależność pomiędzy nadklasą i podklasą – trzeba bowiem pamiętać, że podklasa ma większą funkcjonalność niż nadklasa choć z językowego punktu widzenia wydaje się to dziwne. Dzieje się tak ponieważ klasa pochodna posiada wszystkie możliwości klasy bazowej oraz dokłada swoje, nowe zachowania.

Choć język Java nie pozwala na dziedziczenie wielokrotne to dotyczy ono wielu poziomów klas. Dla przykładu: mając klasę bazową Pracownik to jej rozszerzeniem może być klasa Menedżer, a jej z kolei - klasa Dyrektor. Utworzona w tej sposób struktura nosi nazwę hierarchii dziedziczenia (ang. inheritance hierarchy).[5]

Wyłączanie dziedziczenia

Język Java dysponuje mechanizmem, za pomocą którego można zablokować wykorzystanie dziedziczenia. Jeśli z jakiś powodów programista nie chce aby tworzenie klas pochodnych było możliwe to musi skorzystać ze słowa kluczowego final. Klasy finalne to klasy, których nie można rozszerzyć. Należy pamiętać, iż wszystkie metody w klasy finalnej są finalne. Finalna może być również zmienna bądź metoda zawarta w klasie.[6]

Bibliografia

  • Eckel Bruce, Thinking in Java, wydanie IV, Helion, Gliwice 2006
  • Horstmann Cay S., Cornell Gary, Java. Podstawy, wydanie VIII, Helion, Gliwice 2008

Przypisy

  1. Horstmann Cay S., Cornell Gary, Java. Podstawy, wydanie VIII, Helion, Gliwice 2008, str. 201
  2. Eckel Bruce, Thinking in Java, wydanie IV, Helion, Gliwice 2006, str. 212-214
  3. jw., str. 212-214
  4. jw., str. 196-202
  5. Horstmann Cay S., Cornell Gary, Java. Podstawy, str. 202-208
  6. jw., str. 213-214

Autor: Karol Surówka