Dziedziczenie w Java (z przykładem)

Co to jest dziedziczenie?

Dziedzictwo jest mechanizmem, 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. Dlatego dziedziczenie ułatwia ponowne użycie i jest ważną koncepcją OOP.

Czym jest dziedziczenie? Java?

Java Dziedzictwo jest mechanizmem, w którym jedna klasa nabywa własność innej klasy. W Java, gdy pomiędzy dwiema klasami istnieje relacja „Is-A”, 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 użycia kodu.

Java Składnia dziedziczenia:

class subClass extends superClass  
{  
   //methods and fields  
} 

Rodzaje dziedziczenia w Java

Oto różne rodzaje dziedziczenia Java:

  1. Dziedziczenie pojedyncze
  2. Dziedziczenie wielokrotne
  3. Dziedziczenie wielopoziomowe
  4. Dziedziczenie hierarchiczne
  5. Dziedziczenie hybrydowe

1. Dziedziczenie pojedyncze:

W przypadku pojedynczego dziedziczenia jedna klasa rozszerza inną klasę (tylko jedną klasę).

Pojedyncze dziedziczenie w Java
Dziedziczenie pojedyncze

Na powyższym schemacie klasa B rozszerza tylko klasę A. Klasa A jest superklasą, a klasa B jest podklasą.

2. Dziedziczenie wielokrotne:

Dziedziczenie wielokrotne jest jednym z dziedziczenia w Java typy, w których jedna klasa rozszerza więcej niż jedną klasę. Java nie obsługuje dziedziczenia wielokrotnego.

Dziedziczenie wielokrotne w Java
Java Dziedziczenie wielokrotne

Jak na powyższym schemacie, klasa C rozszerza zarówno klasę A, jak i klasę B.

3. Dziedziczenie wielopoziomowe:

W dziedziczeniu wielopoziomowym jedna klasa może dziedziczyć z klasy pochodnej. W związku z tym klasa pochodna staje się klasą bazową dla nowej klasy.

Dziedziczenie wielopoziomowe w Java
Dziedziczenie wielopoziomowe

Jak pokazano na schemacie, klasa C jest podklasą B, a B jest podklasą klasy A.

4. Dziedziczenie hierarchiczne:

W dziedziczeniu hierarchicznym jedna klasa jest dziedziczona przez wiele podklas.


Dziedziczenie hierarchiczne w Java
Dziedziczenie hierarchiczne

Jak w powyższym przykładzie, klasy B, C i D dziedziczą tę samą klasę A.

5. Dziedziczenie hybrydowe:

Dziedziczenie hybrydowe jest jednym z typów dziedziczenia w Java który jest kombinacją dziedziczenia pojedynczego i wielokrotnego.


Dziedziczenie hybrydowe
Dziedziczenie hybrydowe

Zgodnie z powyższym przykładem wszyscy publiczni i chronieni członkowie klasy A są dziedziczeni do klasy D, najpierw przez klasę B, a następnie przez klasę C.

Uwaga: Java nie obsługuje dziedziczenia hybrydowego/wielokrotnego

Dziedziczenie w Java Przykład

Oto przykład dziedziczenia w Java:


Przykład Java Dziedzictwo
Java Przykład dziedziczenia

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 „this”. Słowo kluczowe super może być użyte do uzyskania dostępu do dowolnego elementu danych lub metod klasy nadrzędnej. Słowo kluczowe super może być użyte w zmienna, poziom metody i konstruktora.

Składnia:

super.<method-name>();

Sprawdź również: - to słowo kluczowe w Java: Co to jest i jak używać z przykładem

Naucz się dziedziczenia w OOP na przykładzie

Rozważ tę samą aplikację bankową z poprzedni przykład.

Mamy otworzyć dwa różne typy kont, jedno do oszczędzania i drugie do sprawdzania (znane również jako bieżące).

Dziedziczenie w OOP

Porównajmy i przeanalizujmy, jak możemy podejść do kodowania z poziomu pliku Perspektywa programowania strukturalnego i obiektowego.

Podejście strukturalne: W programowaniu strukturalnym utworzymy dwie funkcje –

  1. Jeden do wycofania
  2. A drugi do akcji depozytowej.

Ponieważ działanie tych funkcji pozostaje takie samo na wszystkich kontach.

Dziedziczenie w OOP

Podejście OOP: Podczas korzystania z OOP podejście programistyczne. Stworzylibyśmy dwie klasy.

  • Każdy z nich ma implementację funkcji wpłat i wypłat.
  • Będzie to zbędna dodatkowa praca.

Dziedziczenie w OOP

Żądanie zmiany w oprogramowaniu

Teraz nastąpiła zmiana w specyfikacji wymagań dotycząca czegoś, co jest tak powszechne w branży oprogramowania. Należy dodać funkcjonalność Konta Bankowego uprzywilejowanego z Linią Kredytową. Na przykład kredyt w rachunku bieżącym to instrument, w ramach którego możesz wypłacić kwotę większą niż dostępne saldo na Twoim koncie.

Żądanie zmiany w oprogramowaniu

Podejście strukturalne: Stosując podejście funkcjonalne, muszę zmodyfikować moją funkcję wypłaty, która jest już przetestowana i bazowa. Dodaj metodę taką jak poniżej, która zajmie się nowymi wymaganiami.

Żądanie zmiany w oprogramowaniu

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.

Żądanie zmiany w oprogramowaniu

Kolejna prośba o zmianę

Co się stanie, jeśli wymagania zmienią się jeszcze bardziej? Lubię dodać konto karty kredytowej z własnym, unikalnym wymogiem dotyczącym depozytów.

Wielokrotne żądanie zmiany wymagań dotyczących oprogramowania

Podejście strukturalne: Stosując podejście strukturalne, musisz ponownie zmienić testowany fragment kodu depozytu.

Strukturalne podejście do żądania wielokrotnych zmian w oprogramowaniu

Podejście OOP:Ale używając podejścia obiektowego, 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.

Podejście OOP do żądania wielokrotnej zmiany

Zalety dziedziczenia w obiektach OOP

Można jednak argumentować, że we wszystkich klasach masz powtarzające się fragmenty kodu.

Aby temu zaradzić, tworzysz klasę nadrzędną, powiedzmy „konto” i implementujesz tę samą funkcję depozytu i wypłaty. I sprawiasz, że klasy podrzędne dziedziczą klasę „konto”. Dzięki temu będą miały dostęp do funkcji wypłaty i depozytu w klasie konta. Funkcje te nie muszą być implementowane indywidualnie. To jest Dziedziczenie w Javie. .

Zalety dziedziczenia w obiektach OOP

Zalety dziedziczenia w obiektach OOP