Co to jest dziedziczenie?
Dziedziczenie to mechanizm, w którym jedna klasa nabywa własność innej klasy. Na przykład dziecko dziedziczy cechy swoich rodziców. Dzięki dziedziczeniu możemy ponownie wykorzystać pola i metody istniejącej klasy. W związku z tym dziedziczenie ułatwia ponowne użycie i jest ważną koncepcją OOP.
W tym samouczku nauczysz się:
- Rodzaje dziedziczenia
- Dziedziczenie w Javie
- Przykład dziedziczenia w języku Java
- Super słowo kluczowe
- Naucz się dziedziczenia w OOP na przykładzie
Rodzaje dziedziczenia
W Javie istnieją różne typy dziedziczenia:
Dziedziczenie pojedyncze:
W dziedziczeniu pojedynczym jedna klasa rozszerza inną klasę (tylko jedna klasa).
Na powyższym schemacie, klasa B rozszerza tylko klasę A. Klasa A jest superklasą, a klasa B jest podklasą.
Dziedziczenie wielokrotne:
W przypadku wielokrotnego dziedziczenia: jedna klasa rozszerzająca więcej niż jedną klasę. Java nie obsługuje dziedziczenia wielokrotnego.
Zgodnie z powyższym schematem, klasa C rozszerza zarówno klasę A, jak i klasę B.
Dziedziczenie wielopoziomowe:
W przypadku dziedziczenia wielopoziomowego jedna klasa może dziedziczyć z klasy pochodnej. W związku z tym klasa pochodna staje się klasą bazową dla nowej klasy.
Jak pokazano na diagramie, klasa C jest podklasą klasy B, a B jest podklasą klasy A.
Dziedziczenie hierarchiczne:
W dziedziczeniu hierarchicznym jedna klasa jest dziedziczona przez wiele podklas.
Jak w powyższym przykładzie, klasy B, C i D dziedziczą tę samą klasę A.
Dziedziczenie hybrydowe:
Dziedziczenie hybrydowe to połączenie dziedziczenia pojedynczego i wielokrotnego.
Jak na powyższym przykładzie, wszyscy publiczni i chronieni członkowie klasy A są dziedziczeni do klasy D, najpierw przez klasę B, a po drugie przez klasę C.
Uwaga: Java nie obsługuje dziedziczenia hybrydowego / wielokrotnego
Dziedziczenie w Javie
JAVA INHERITANCE to mechanizm, w którym jedna klasa nabywa własność innej klasy. W Javie, gdy istnieje relacja „Is-A” między dwiema klasami, używamy dziedziczenia. Klasa nadrzędna nazywana jest superklasą, a klasa dziedziczona nazywana jest podklasą. Słowo kluczowe
extends
jest używany przez podklasę do dziedziczenia cech superklasy.
Dziedziczenie jest ważne, ponieważ prowadzi do ponownego wykorzystania kodu.
Składnia dziedziczenia Java:
class subClass extends superClass{//methods and fields}
Przykład dziedziczenia w języku Java
class Doctor {void Doctor_Details() {System.out.println("Doctor Details… ");}}class Surgeon extends Doctor {void Surgeon_Details() {System.out.println("Surgen Detail… ");}}public class Hospital {public static void main(String args[]) {Surgeon s = new Surgeon();s.Doctor_Details();s.Surgeon_Details();}}
Super słowo kluczowe
Słowo kluczowe super jest podobne do słowa kluczowego „to”.
Słowo kluczowe super może służyć do uzyskiwania dostępu do dowolnego członka danych lub metod klasy nadrzędnej.
Słowo kluczowe Super może być używane na poziomie zmiennej, metody i konstruktora.
Składnia:
super.();
Naucz się dziedziczenia w OOP na przykładzie
Rozważ tę samą aplikację bankową z poprzedniego przykładu.
Mamy otworzyć dwa różne typy kont, jedno do zapisywania, a drugie do sprawdzania (znane również jako bieżące).
Porównajmy i przestudiujmy, jak możemy podejść do kodowania z perspektywy programowania strukturalnego i zorientowanego obiektowo. Podejście strukturalne : w programowaniu strukturalnym utworzymy dwie funkcje -
- Jeden do wycofania
- A drugi do akcji depozytowej.
Ponieważ działanie tych funkcji pozostaje takie samo na wszystkich kontach.
Podejście OOP : Podczas korzystania z podejścia programowania OOP. Stworzylibyśmy dwie klasy.
- Każdy z realizacją funkcji wpłaty i wypłaty.
- Spowoduje to zbędną dodatkową pracę.
Żądanie zmiany oprogramowania
Teraz nastąpiła zmiana w specyfikacji wymagań dla czegoś, co jest tak powszechne w branży oprogramowania. Powinieneś dodać funkcjonalność uprzywilejowanego konta bankowego z linią debetową. W tle, debet to instrument, z którego można wypłacić kwotę wyższą niż dostępne saldo na koncie.
Podejście strukturalne: Używając podejścia funkcjonalnego, muszę zmodyfikować moją funkcję wycofywania, która jest już przetestowana i oparta na podstawach. Dodanie metody jak poniżej zajmie się nowymi wymaganiami.
Podejście OOP: Korzystając z podejścia OOP, wystarczy napisać nową klasę z unikalną implementacją funkcji wycofania. Nigdy nie dotknęliśmy testowanego fragmentu kodu.
Kolejna prośba o zmianę
Co się stanie, jeśli wymaganie ulegnie dalszej zmianie? Chciałbym dodać konto karty kredytowej z własnym unikalnym wymogiem depozytów .
Podejście strukturalne: Używając podejścia strukturalnego, musisz ponownie zmienić testowany fragment kodu depozytu.
Podejście OOP : Ale używając podejścia zorientowanego obiektowo, po prostu utworzysz nową klasę z jej unikalną implementacją metody depozytu (zaznaczoną na czerwono na poniższym obrazku).
Więc nawet jeśli programowanie strukturalne wydaje się początkowo łatwym podejściem, OOP wygrywa w dłuższej perspektywie.
Zaleta dziedziczenia w obiektach operacyjnych
Można jednak argumentować, że we wszystkich klasach występują powtarzające się fragmenty kodu.
Aby temu zaradzić, tworzysz klasę nadrzędną, mówisz „konto” i wdrażasz tę samą funkcję wpłaty i wypłaty. I uczyń klasy potomne dziedziczoną klasą „konta”. Dzięki temu będą mieli dostęp do funkcji wypłat i wpłat w klasie konta.
Funkcje nie muszą być wdrażane indywidualnie. To jest dziedziczenie w java. .