Dziedziczenie w Java (z przykładem)

⚡ Inteligentne podsumowanie

Dziedziczenie w Java to mechanizm, w którym jedna klasa przejmuje pola i metody innej klasy za pomocą słowa kluczowego extends. Promuje on możliwość ponownego wykorzystania kodu i modeluje relację typu „jest-a” między superklasą a jej podklasami.

  • 🧬 Definicja dziedziczenia: Jedna klasa przejmuje pola i metody innej klasy za pomocą extends.
  • 👨👩👧 Relacja typu „jest-a”: Modeluje hierarchię klasy nadrzędnej (superklasy) i klasy potomnej (podklasy).
  • 🗂️. Pięć typów: Dziedziczenie pojedyncze, wielokrotne, wielopoziomowe, hierarchiczne i hybrydowe.
  • ???? Java Ograniczenie: Java nie obsługuje dziedziczenia wielokrotnego i hybrydowego poprzez klasy.
  • 🔑 Super słowo kluczowe: Uzyskuje dostęp do zmiennych, metod i konstruktorów klasy nadrzędnej z podklasy.
  • ✅ Korzyści: Ponowne wykorzystanie przetestowanego kodu i dodawanie funkcji za pośrednictwem nowych klas bez modyfikowania istniejących.

Dziedziczenie w Java

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: Jednak stosując podejście obiektowe, po prostu utworzysz nową klasę z unikalną implementacją metody depozytu (zaznaczoną na czerwono na poniższym obrazku). Choć programowanie strukturalne wydaje się początkowo łatwe, w dłuższej perspektywie wygrywa programowanie obiektowe.

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

FAQ

Java unika wielokrotnego dziedziczenia klas, aby zapobiec „problemowi diamentu”, w którym kompilator nie może zdecydować, której odziedziczonej metody użyć. Zamiast tego, Java pozwala klasie implementować wiele interfejsów w celu bezpiecznego osiągnięcia podobnej elastyczności.

Słowo kluczowe this odnosi się do bieżącego obiektu i jego elementów, natomiast super do bezpośredniej klasy nadrzędnej. Użyj super, aby wywołać zmienne, metody lub konstruktor klasy nadrzędnej z podklasy.

Dziedziczenie modeluje relację „Jest-A”, w której podklasa rozszerza klasę nadrzędną. Kompozycja modeluje relację „Ma-A”, w której klasa zawiera inne obiekty. Kompozycja jest często bardziej elastyczna i preferowana w przypadku projektów luźno powiązanych.

Sztuczna inteligencja może analizować obowiązki klas, sugerować wspólne klasy bazowe, rekomendować interfejsy zamiast głębokiego dziedziczenia i oznaczać zduplikowany kod.ping Programiści tworzą przejrzyste, wielokrotnego użytku hierarchie, które są zgodne z zasadami projektowania obiektowego.

Tak. Statyczna analiza wspomagana przez sztuczną inteligencję może mierzyć głębokość dziedziczenia, sygnalizować niestabilne lub nadmiernie zagnieżdżone hierarchie oraz sugerować refaktoryzację w kierunku kompozycji lub interfejsów w celu poprawy łatwości utrzymania i zmniejszenia ścisłego powiązania.

Podsumuj ten post następująco: