Nedarvning i Java OOP'er: Lær forskellige typer med eksempel

Hvad er arv?

Arv er en mekanisme, hvor en klasse erhverver egenskaben af ​​en anden klasse. For eksempel arver et barn sine forældres egenskaber. Med arv kan vi genbruge felterne og metoderne i den eksisterende klasse. Derfor letter arv genanvendelighed og er et vigtigt koncept for OOP'er.

I denne tutorial lærer du-

Typer af arv

Her er de forskellige typer af arv i Java:

Enkelt arv:

I Single Inheritance udvider en klasse en anden klasse (kun én klasse).

Enkeltarv i Java
Enkelt arv

I ovenstående diagram udvider Klasse B kun Klasse A. Klasse A er en superklasse og Klasse B er en underklasse.

Multipel arv:

Multiple Inheritance er en af ​​arven i Java-typer, hvor én klasse strækker sig over mere end én klasse. Java understøtter ikke multipel nedarvning.

Multipel arv i Java
Java Multiple Inheritance

Som i ovenstående diagram udvider klasse C klasse A og klasse B begge.

Arv på flere niveauer:

I Multilevel Inheritance kan én klasse arve fra en afledt klasse. Derfor bliver den afledte klasse basisklassen for den nye klasse.

Multilevel Arv i Java
Multilevel arv

Som vist i diagrammet er klasse C underklasse af B, og B er en underklasse klasse A.

herarchical arv:

I Hierarchical Inheritance, én klasse nedarves af mange underklasser.


herarchical Arv i Java
herarchical Arv

Som i ovenstående eksempel arver klasse B, C og D den samme klasse A.

Hybrid arv:

Hybrid arv er en af ​​arvetyperne i Java, som er en kombination af enkelt og multipel arv.


Hybrid arv
Hybrid arv

Som i ovenstående eksempel nedarves alle offentlige og beskyttede medlemmer af klasse A i klasse D, først via klasse B og for det andet via klasse C.

Bemærk: Java understøtter ikke hybrid/multipel nedarvning

Arv i Java

Java arv er en mekanisme, hvor en klasse erhverver egenskaben af ​​en anden klasse. I Java, når der eksisterer et "Is-A" forhold mellem to klasser, bruger vi arv. Forælderklassen kaldes en superklasse, og den nedarvede klasse kaldes en underklasse. Nøgleordet extends bruges af underklassen til at arve superklassens funktioner.

Arv er vigtigt, da det fører til genbrug af kode.

Java-arvesyntaks:

class subClass extends superClass  
{  
   //methods and fields  
}  

Eksempel på Java-arv

Her er et eksempel på arv i Java:


Eksempel på Java-arv
Eksempel på Java-arv

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øgeord

Supersøgeordet ligner "dette" søgeord.

Nøgleordet super kan bruges til at få adgang til ethvert datamedlem eller metoder i den overordnede klasse.

Super søgeord kan bruges på variabel, metode og konstruktørniveau.

Syntaks:

super.<method-name>();

Tjek også:- dette nøgleord i Java: Hvad er og hvordan man bruger det med eksempel

Lær arv i OOP'er med eksempel

Overvej den samme bankansøgning fra tidligere eksempel.

Det er meningen, at vi skal åbne to forskellige kontotyper, en til opsparing og en anden til kontrol (også kendt som løbende).

Arv i OOP

Lad os sammenligne og studere, hvordan vi kan gribe kodning an fra en struktureret og objektorienteret programmeringsperspektiv.

Strukturel tilgang: I struktureret programmering vil vi oprette to funktioner –

  1. En til at trække sig tilbage
  2. Og den anden til indskudshandling.

Da funktionen af ​​disse funktioner forbliver den samme på tværs af konti.

Arv i OOP'er

OOPs tilgang: Mens du bruger OOP'er programmeringstilgang. Vi ville oprette to klasser.

  • Hver har implementering af indbetalings- og udbetalingsfunktioner.
  • Dette vil overflødiggøre ekstra arbejde.

Arv i OOP'er

Ændringsanmodning i software

Nu er der en ændring i kravspecifikationen for noget, der er så almindeligt i softwarebranchen. Det er meningen, at du skal tilføje funktionalitetsprivilegeret bankkonto med kassekredit. For en baggrund er kassekredit en facilitet, hvor du kan hæve et beløb, der er mere end tilgængeligt saldo på din konto.

Ændringsanmodning i software

Strukturel tilgang: Ved at bruge en funktionel tilgang er jeg nødt til at ændre min tilbagetrækningsfunktion, som allerede er testet og baselinet. Og tilføj en metode som nedenfor vil tage sig af nye krav.

Ændringsanmodning i software

OOPs tilgang: Ved at bruge OOPs tilgang, skal du blot skrive en ny klasse med unik implementering af tilbagetrækningsfunktion. Vi rørte aldrig ved det testede kodestykke.

Ændringsanmodning i software

Endnu en ændringsanmodning

Hvad hvis kravet ændres yderligere? Gerne tilføje kreditkortkonto med sit eget unikke krav om indskud.

Flere ændringsanmodninger i softwarekrav

Strukturel tilgang: Ved at bruge den strukturelle tilgang skal du ændre testet indbetalingskode igen.

Strukturel tilgang til multiple ændringsanmodninger i software

OOPs tilgang: Men ved at bruge objektorienteret tilgang, vil du bare oprette en ny klasse med dens unikke implementering af indbetalingsmetode (markeret rødt på billedet nedenfor).

Så selvom den strukturelle programmering umiddelbart virker som en nem tilgang, så vinder OOP på lang sigt.

OOP's tilgang til multiple ændringsanmodninger

Fordele ved arv i OOP'er

Men man kan hævde, at på tværs af alle klasser har du et gentagne stykke kode.

For at overvinde dette, opretter du en forældreklasse, siger "konto" og implementerer den samme funktion med indbetaling og udbetaling. Og gør børneklasser til en "konto"-klasse. Så de får adgang til hæve- og indbetalingsfunktioner i kontoklasse.

Funktionerne skal ikke implementeres individuelt. Dette er Arv i java. .

Fordele ved arv i OOP'er

Fordele ved arv i OOP'er

Tjek også:- Java-tutorial for begyndere: Lær Core Java-programmering