Czas poruszyć wątek dziedziczenia! Jest to kolejny element stanowiący zakres podstawowego rozumienia języka Java. Dziedziczenie w języku Java to fundament w paradygmacie obiektowym. Na czym on polega? Jak on działa w programie? Jak go dostrzec w kodzie? Spokojnie, jedno pytanie po drugim zostanie tu omówione.
Tweet |
DZIEDZICZENIE W JĘZYKU JAVA
Jak wspomnieliśmy wcześniej, klasa to szablon dla tworzonych obiektów tego typu. Klasa może również rozszerzać o inną klasę będącą wyżej w hierarchii. Chodzi o możliwość "odziedziczania" danych składowych i metod z klasy nadrzędnej bez konieczności duplikowania tych samych metod i zmiennych. Poświęcono kilka słów kluczowych dotyczących dziedziczenia, które będziemy rozpatrywać w przyszłych artykułach, a na razie skupimy się na najważniejszym: "extends".
Słowo "extends" (ang. "rozszerza") dodane po podaniu nazwy klasy umożliwia dziedziczenie od innej już istniejącej klasy. W efekcie końcowym, dysponujemy wszystkimi danymi składowymi i metodami znajdującymi się w klasie dziedziczonej objęte modyfikatorem "public" lub "protected" (rzadko stosowany). W Javie, odziedziczanie od wielu klas pod rząd jest niemożliwe (o tym, dlaczego nie jest możliwe, przeczytacie więcej tutaj). Po słowie "extends" następuje podanie TYLKO JEDNEJ nazwy klasy. W C++ jest dopuszczalny taki manewr, aczkolwiek to nie jest artykuł dotyczący tego języka.
KOD ŹRÓDŁOWY Z DZIEDZICZENIEM
Tyle teorii na początek wystarczy, odłóżmy szczegóły na bok. Oto przykładowy program wykorzystujący banalne dziedziczenie w języku Java:
- KLASA "Main"
public class Main
{
public static void main(String[] args)
{
Character c = new Character();
Warrior w = new Warrior(8);
c.saySomething();
w.saySomething();
}
}
- KLASA "Character"
public class Character
{
private int level;
public void setLevel(int level)
{
this.level = level;
}
public void saySomething()
{
System.out.println("Wypowiadam się z klasy " + getClass().getSimpleName() + ". Mam poziom " + level);
}
}
- KLASA "Warrior"
public class Warrior extends Character
{
public Warrior(int level)
{
setLevel(level);
}
}
Trochę koślawy przykład, natomiast pokazuje on, że dziedziczenie metod publicznych powoduje uzyskanie do nich dostępu w klasie dziedziczącej od innej ("saySomething"), zarówno w tej klasie, jak i na zewnątrz niej. Świadczy o tym poprawność wywołania tej samej metody z obu odrębnych klas posiadających wzajemną relację (klasa "Main"). Ciąg "getClass().getSimpleName()" pozwala wyodrębnić nazwę klasy z której ta wiadomość pochodzi dzięki czemu możemy zidentyfikować od kogo ten komunikat przyszedł. W tym konkretnym przykładzie klasa "Character" stanowiąca "szkielet" dla innych przyszłych postaci nie powinna być wykorzystywana do tworzenia instancji o jej typie. Tylko dziedziczenie powinno być dozwolone. Da się coś z tym zrobić? Owszem, tutaj są dodatkowe informacje na ten temat.
![]() |
Słowo kluczowe "extends" przeznaczone jest do wyznaczania klasy od której będzie się odbywać dziedziczenie w języku Java.
Na razie kończymy na ten moment, aczkolwiek to jest dopiero wierzchołek góry lodowej. Tu znajduje się drugi rozdział dziedziczenia.