Arv i Java (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.
Hvad er 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 }
Arvetyper i Java
Her er de forskellige typer af arv i Java:
- Enkelt arv
- Flere arv
- Multilevel arv
- Hierarkisk arv
- Hybrid arv
1. Enkeltarv:
I Single Inheritance udvider en klasse en anden klasse (kun én klasse).

I ovenstående diagram udvider Klasse B kun Klasse A. Klasse A er en superklasse og Klasse B er en underklasse.
2. Multipel arv:
Multipel arv er en af arven i Java typer, hvor én klasse strækker sig over mere end én klasse. Java understøtter ikke multipel arv.

Som i ovenstående diagram udvider klasse C klasse A og klasse B begge.
3. 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.

Som vist i diagrammet er klasse C underklasse af B, og B er en underklasse klasse A.
4. Hierarkisk arv:
I Hierarchical Inheritance nedarves én klasse af mange underklasser.

Som i ovenstående eksempel arver klasse B, C og D den samme klasse A.
5. Hybrid arv:
Hybrid arv er en af arvetyperne i Java som er en kombination af enkelt og multipel 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 Eksempel
Her er et eksempel på arv i 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ø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 søgeord i Java: Hvad er & hvordan man bruger 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).
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 –
- En til at trække sig tilbage
- Og den anden til indskudshandling.
Da funktionen af disse funktioner forbliver den samme på tværs af konti.
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.
Æ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.
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.
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.
Endnu en ændringsanmodning
Hvad hvis kravet ændres yderligere? Gerne tilføje kreditkortkonto med sit eget unikke krav om indskud.
Strukturel tilgang: Ved at bruge den strukturelle tilgang skal du ændre testet indbetalingskode igen.
OOPs tilgang: Men ved at bruge en 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.
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. .