Dziedziczenie jest jedną z podstawowych koncepcji programowania obiektowego. W programowaniu słowo dziedziczenie reprezentuje relację, w której klasa potomna przyjmuje stan i zachowanie klasy nadrzędnej.

Celem dziedziczenia w tworzeniu oprogramowania jest ułatwienie ponownego wykorzystania bezpiecznego i niezawodnego oprogramowania. Jedną z głównych zalet używania dziedziczenia jest eliminacja zbędnego kodu w programach.

Jak działa dziedziczenie

Ideą dziedziczenia jest to, że wiele klas lub obiektów ma taki sam zestaw atrybutów i metod. Dlatego też, w duchu tworzenia niezawodnego oprogramowania, nowe klasy mogą teraz czerpać z wcześniej istniejących klas pokrewnych i, w razie potrzeby, rozszerzać istniejące stany i zachowania.

Rzeczywistym przykładem tego, jak działa dziedziczenie, byłoby rozważenie owoców. Jest to szeroka etykieta, która służy do hermetyzacji szeregu różnych elementów.

Jabłko jest owocem, podobnie jak pomarańcza. Jednak pomarańcza to nie jabłko, więc gdybyś był właścicielem sklepu, nie miałbyś owoców jako jednego z produktów w magazynie. Być może mógłbyś mieć sekcję owoców w swoim ekwipunku, a pod tą sekcją miałbyś bardziej szczegółowe przedmioty, takie jak jabłka i pomarańcze.

instagram viewer

Tak działa dziedziczenie.

Korzystanie z dziedziczenia w Javie

Dziedziczenie może być używane w dowolnym języku programowania, który używa rozszerzenia paradygmat programowania obiektowego. Jednak dokładny sposób używania dziedziczenia zależy od konkretnego języka programowania.

Na przykład, C ++ jest również zorientowanym obiektowo językiem programowania. C ++ obsługuje tak zwane dziedziczenie wielokrotne, podczas gdy Java obsługuje tylko dziedziczenie pojedyncze.

Oznacza to, że w Javie klasa nadrzędna może mieć wiele klas podrzędnych, ale każda klasa podrzędna może mieć tylko jedną klasę nadrzędną (jedno dziedziczenie). Istnieje jednak sposób na osiągnięcie pośredniego dziedziczenia wielokrotnego w Javie poprzez utworzenie relacji dziadek, rodzic i dziecko.

Tworzenie klasy nadrzędnej w języku Java

Proces wybierania klasy nadrzędnej z dokumentu wymagań oprogramowania jest nazywany analizą zorientowaną obiektowo. Podczas tego procesu wyrażenie „jest a” jest często używane w celu określenia możliwych relacji dziedziczenia. Czerpiąc z naszego przykładu powyżej, powinieneś zobaczyć, że owoc będzie naszą klasą rodzicielską.

Przykład klasy rodzicielskiej owoców


klasa publiczna Fruit {
// Deklaracja zmiennej
chronione nasiona String;
chroniony ciąg skinColor;
chroniony smak String;
// Domyślny konstruktor
public Fruit () {
ziarno = "";
skinColor = "";
smak = "";
}
// Podstawowy konstruktor
public Fruit (String seed, String skinColor, String smak) {
this.seed = nasiona;
this.skinColor = skinColor;
this.taste = smak;
}
// metody pobierające i ustawiające
public String getSeed () {
powrót nasion;
}
public void setSeed (String seed) {
this.seed = nasiona;
}
public String getSkinColor () {
return skinColor;
}
public void setSkinColor (String skinColor) {
this.skinColor = skinColor;
}
public String getTaste () {
powrócić smak;
}
public void setTaste (String smak) {
this.taste = smak;
}
// metoda jedzenia
public void eat () {
// ogólny kod, jak jeść owoc
}
// metoda soków
public void juice () {
// ogólny kod dotyczący wyciskania soku z owocu
}
}

Jednym z najbardziej znaczących aspektów powyższej klasy nadrzędnej jest modyfikator dostępu, który jest używany z każdą deklaracją zmiennej. Modyfikator dostępu „protected” jest idealny do stosowania w klasach nadrzędnych, ponieważ uniemożliwia klasom niebędącym dziećmi uzyskanie dostępu do atrybutów danych klasy nadrzędnej.

W dalszej części kodu poznasz konstruktory, metody pobierające i ustawiające, które są ogólnymi elementami składowymi każdej klasy Javy. Na koniec zapoznajesz się z dwiema metodami (sok i jedzenie), które zostały stworzone w klasie nadrzędnej naszego programu, ponieważ są one uniwersalne dla wszystkich owoców - wszystkie owoce mogą być spożywane i wyciskane.

Tworzenie klas potomnych w Javie

Klasy potomne są zwykle nazywane klasami wyspecjalizowanymi lub pochodnymi, ponieważ dziedziczą stan i zachowanie po rodzicu i często dostosowują te atrybuty, aby były bardziej szczegółowe.

Kontynuując nasz przykład, powinieneś być w stanie zobaczyć, dlaczego pomarańczowy byłby odpowiednią klasą potomną powyższej klasy owoców.

Przykład Orange Child Class


klasa publiczna Orange rozszerza Fruit {
// deklaracja zmiennej
private int supremes;
// domyślny konstruktor
public Orange () {
supremes = 0;
}
// główny konstruktor
public Orange (String seed, String skinColor, String smak, int supremes) {
super (nasiona, kolor skóry, smak);
this.supremes = supremes;
}
// metody pobierające i ustawiające
public int getsupremes () {
powrót supremes;
}
public void setsupremes (int supremes) {
this.supremes = supremes;
}
// metoda jedzenia
public void eat () {
// jak zjeść pomarańczę
}
// metoda soków
public void juice () {
// jak wycisnąć sok i pomarańczę
}
// metoda peelingu
public void peel () {
// jak obrać pomarańczę
}
}

Istnieje różnica między tym, jak wygląda zwykła deklaracja klasy Javy, a tym, co mamy w naszym kodzie powyżej. Słowo kluczowe „extends” jest używane w Javie, aby umożliwić dziedziczenie.

W naszym przykładzie powyżej klasa potomna (pomarańczowa) rozszerza klasę rodzica (owoc). Dlatego stan i zachowanie klasy owoców mogą być teraz dostępne i modyfikowane przez klasę pomarańczową.

Unikalny atrybut, który ma nasza pomarańczowa klasa, jest identyfikowany przez nazwę zmiennej supremes (która jest oficjalną nazwą małych segmentów występujących w pomarańczach). Tutaj do gry wkracza specjalizacja; nie wszystkie owoce mają właściwości supremes, ale wszystkie pomarańcze mają, więc zarezerwowanie zmiennej supremes dla klasy pomarańczy jest logiczne.

Dodanie metody „skórki” do wcześniej istniejących metod „jeść” i „sok” jest również logiczne, ponieważ chociaż nie wszystkie owoce można obrać, pomarańcze często są obrane.

Należy pamiętać, że gdybyśmy nie zamierzali zmieniać istniejących metod „jedzenia” i „soku”, nie musielibyśmy włączać ich do naszej klasy pomarańczy. Metody w klasie orange zastępują wszystkie podobne metody w klasie fruit. Więc gdyby wszystkie owoce były spożywane i wyciskane w ten sam sposób, nie musielibyśmy tworzyć tych metod w klasie pomarańczy.

Konstruktorzy ról grają w dziedziczeniu

Domyślnie konstruktory klas nadrzędnych są dziedziczone przez klasy podrzędne. Dlatego też, jeśli tworzony jest obiekt klasy potomnej, oznacza to, że obiekt klasy nadrzędnej jest również tworzony automatycznie.

Wracając do naszego przykładu, za każdym razem, gdy tworzony jest nowy pomarańczowy obiekt, tworzony jest również obiekt owocowy, ponieważ pomarańcza jest owocem.

W tle, gdy tworzony jest obiekt klasy potomnej, najpierw wywoływany jest konstruktor klasy nadrzędnej, a następnie konstruktor klasy potomnej. W naszej pomarańczowej klasie potomnej powyżej, jeśli pomarańczowy obiekt zostanie utworzony bez żadnych parametrów, zostanie wywołany nasz domyślny konstruktor klasy owoców, a po nim domyślny kontrahent klasy pomarańczowej.

Metoda „super” w naszym głównym konstruktorze powyżej jest konieczna, ponieważ określa, że ​​główny konstruktor - i nie jest konstruktorem domyślnym - rodzicielskiej klasy owoców powinno być wywoływane za każdym razem, gdy pojawi się pomarańczowy obiekt z parametrami Utworzony.

Teraz możesz używać dziedziczenia w Javie

Z tego artykułu dowiedziałeś się, czym jest dziedziczenie, jak działa i dlaczego jest to tak ważna koncepcja w programowaniu. Możesz teraz tworzyć relacje dziedziczenia za pomocą języka programowania Java. Ponadto wiesz już, jak obejść pojedynczą regułę dziedziczenia w Javie, tworząc relację dziadków.

Źródło: Andreas Wohlfahrt /Pexels

E-mail
Jak zorganizować kod zorientowany obiektowo za pomocą dziedziczenia

Właściwe programowanie obiektowe oznacza, że ​​musisz wiedzieć o dziedziczeniu oraz o tym, jak może to uprościć kodowanie i zmniejszyć liczbę błędów.

Czytaj dalej

Powiązane tematy
  • Programowanie
  • Jawa
  • Programowanie obiektowe
O autorze
Kadeisha Kean (Opublikowano 3 artykuły)

Kadeisha Kean jest pełnoprawnym programistą i autorem techniczno-technologicznym. Ma wyraźną umiejętność upraszczania niektórych najbardziej złożonych koncepcji technologicznych; wytwarzanie materiału zrozumiałego dla każdego nowicjusza w dziedzinie technologii. Pasjonuje się pisaniem, tworzeniem ciekawego oprogramowania i podróżowaniem po świecie (poprzez filmy dokumentalne).

Więcej od Kadeishy Kean

Zapisz się do naszego newslettera

Dołącz do naszego biuletynu, aby otrzymywać wskazówki techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Jeszcze jeden krok…!

Potwierdź swój adres e-mail w wiadomości e-mail, którą właśnie wysłaliśmy.

.