Przemysław Wionczyk
JAVA
Dziedziczenie
Dziedziczenie
1 / 7
Przemysław Wionczyk
JAVA
Dziedziczenie a kompozycja
W programowaniu obiektowym, tak jak się uczyliśmy przy C++,
mamy dwa rodzaje zależności między obiektami:
•
kompozycja - obiekt może zawierać egzemplarze innych obiektów
wewnątrz (tak samochód zawiera silnik),
•
dziedziczenie – obiekt dziedziczy cechy innego, prostszego i
dodaje do nich swoje, nowe cechy i funkcje.
2 / 7
Przemysław Wionczyk
JAVA
Kompozycja
W tej sytuacji jako pola nowej klasy obok zwykłych zmiennych
typów prostych deklarujemy zmienne obiektowe innych klas, np.:
class public Auto {
boolean turbo;
Silnik silnik;
public Auto(float pojemnosc) {
silnik = new Silnik(pojemnosc);
turbo = true;
}
}
3 / 7
Przemysław Wionczyk
JAVA
Dziedziczenie
Dziedziczenie w Javie wygląda podobnie jak w C++, a do jego
zapisu służy słowo kluczowe extends. Różnicą w stosunku do C++ jest
brak dziedziczenia wielokrotnego, którego jednak i tak nie omawialiśmy
przy C++ ze względu na brak czasu i niewielkie zastosowanie tej
konstrukcji. Pamiętać powinniśmy też o słowie kluczowym protected,
które daje dostęp do zmiennych i metod klasie dziedziczącej.
Z poziomu konstruktora nowej klasy, musimy z reguły użyć
konstruktora klasy bazowej. Wywołujemy go pisząc słowo super, a w
nawiasie pisząc parametry konstruktora tej klasy bazowej.
4 / 7
Przemysław Wionczyk
JAVA
Dziedziczenie
class Auto {
Silnik silnik;
public Auto(float pojemnosc) {
silnik = new Silnik(pojemnosc);
}
}
class TIR extends Auto{
int lodownosc;
public TIR(int ladownosc) {
super(1.4);
this.ladownosc = ladownosc;
}
}
5 / 7
Przemysław Wionczyk
JAVA
Przesłanianie metod
Dziedzicząc w Javie możemy przesłaniać metody które były w
klasie bazowej nowymi o identycznej nazwie i liście parametrów,
a mimo to mieć dostęp do wersji metody z klasy bazowej. Dostęp ten
otrzymujemy pisząc słowo super, po nim kropkę i nazwę metody z klasy
bazowej. Zatem jeśli klasa Auto i klasa TIR miałyby metody
przyspiesz(int doIlu), to aby użyć metody z klasy bazowej musielibyśmy
napisać:
super.przyspiesz(110);
6 / 7
Przemysław Wionczyk
JAVA
Ćwiczenie
Zbuduj klasę Ssaka z informacjami o wieku, wadze i szybkości na
lądzie. Parametry te powinien ustawiać konstruktor, ale musimy mieć też
konstruktor bezparametrowy ustawiający te pola na jakieś podstawowe
wartości. Musimy mieć funkcję Przemieść(int oIle) która naszego ssaka
przesunie w nowe miejsce.
Następnie napisz klasę nietoperz, której dodamy funkcję Leć oraz
użyjemy tej metody Leć wewnątrz przesłoniętej metody Przemieść.
Dodatkowo napisz klasę kot z funkcją Skocz i funkcją Biegnij, a w
przesłoniętej Przemieść użyj biegania tylko gdy odległość > niż 1 metr.
7 / 7