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:
- Dziedziczenie pojedyncze
- Dziedziczenie wielokrotne
- Dziedziczenie wielopoziomowe
- Dziedziczenie hierarchiczne
- Dziedziczenie hybrydowe
1. Dziedziczenie pojedyncze:
W przypadku pojedynczego dziedziczenia jedna klasa rozszerza inną klasę (tylko jedną klasę).
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.
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.
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.
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.
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:
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).
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 –
- 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 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.
Żą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.
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.
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 wymagania zmienią się jeszcze bardziej? Lubię dodać konto karty kredytowej z własnym, unikalnym wymogiem dotyczącym depozytów.
Podejście strukturalne: Stosując podejście strukturalne, musisz ponownie zmienić testowany fragment kodu depozytu.
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.
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. .