Arv i Java (med eksempel)
Hva er arv?
Arv er en mekanisme der en klasse får eiendommen til en annen klasse. For eksempel arver et barn egenskapene til foreldrene sine. Med arv kan vi gjenbruke feltene og metodene til den eksisterende klassen. Derfor letter arv gjenbruk og er et viktig konsept for OOPs.
Hva er arv i Java?
Java Arv er en mekanisme der en klasse får eiendommen til en annen klasse. I Java, når det eksisterer et "Is-A"-forhold mellom to klasser, bruker vi arv. Foreldreklassen kalles en superklasse og den arvede klassen kalles en underklasse. Nøkkelordet extends
brukes av underklassen for å arve egenskapene til superklassen. Arv er viktig siden det fører til gjenbruk av kode.
Java Arvesyntaks:
class subClass extends superClass { //methods and fields }
Typer av arv i Java
Her er de ulike typer arv i Java:
- Enkeltarv
- Flere arv
- Multilevel Arv
- Hierarkisk arv
- Hybrid arv
1. Enkeltarv:
I Single Inheritance utvider en klasse en annen klasse (kun én klasse).
I diagrammet ovenfor strekker klasse B seg bare til klasse A. Klasse A er en superklasse og klasse B er en underklasse.
2. Multippel arv:
Multippelarv er en av arvene i Java typer der én klasse strekker seg over mer enn én klasse. Java støtter ikke multippel arv.
I henhold til diagrammet ovenfor, utvider klasse C klasse A og klasse B begge.
3. Flernivåarv:
I Multilevel Inheritance kan én klasse arve fra en avledet klasse. Derfor blir den avledede klassen basisklassen for den nye klassen.
Som vist i diagrammet er Klasse C underklasse av B og B er en underklasse Klasse A.
4. Hierarkisk arv:
I Hierarchical Inheritance arves én klasse av mange underklasser.
Som i eksemplet ovenfor, arver klasse B, C og D samme klasse A.
5. Hybrid arv:
Hybrid arv er en av arvetypene i Java som er en kombinasjon av enkel og multippel arv.
Som i eksemplet ovenfor, arves alle offentlige og beskyttede medlemmer av klasse A til klasse D, først via klasse B og dernest via klasse C.
OBS: Java støtter ikke hybrid/multippel arv
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(); } }
Supert nøkkelord
Supersøkeordet ligner på "dette" søkeordet. Nøkkelordet super kan brukes for å få tilgang til et hvilket som helst datamedlem eller metoder for overordnet klasse. Super nøkkelord kan brukes på variabel, metode og konstruktørnivå.
Syntaks:
super.<method-name>();
Sjekk også: - dette søkeordet i Java: Hva er og hvordan du bruker med Eksempel
Lær arv i OOP-er med eksempel
Vurder den samme bankapplikasjonen fra forrige eksempel.
Vi er ment å åpne to forskjellige kontotyper, en for sparing og en annen for sjekking (også kjent som gjeldende).
La oss sammenligne og studere hvordan vi kan nærme oss koding fra en strukturert og objektorientert programmeringsperspektiv.
Strukturell tilnærming: I strukturert programmering vil vi lage to funksjoner –
- En å trekke seg tilbake
- Og den andre for innskuddshandling.
Siden driften av disse funksjonene forblir den samme på tvers av kontoene.
OOPs tilnærming: Mens du bruker OOP programmering tilnærming. Vi ville opprette to klasser.
- Hver har implementering av innskudds- og uttaksfunksjoner.
- Dette vil overflødiggjøre ekstraarbeid.
Endre forespørsel i programvare
Nå er det en endring i kravspesifikasjonen for noe som er så vanlig i programvarebransjen. Du skal legge til funksjonalitetsprivilegert bankkonto med kassekreditt. For en bakgrunn er kassekreditt en fasilitet hvor du kan ta ut et beløp som er mer enn tilgjengelig saldo på kontoen din.
Strukturell tilnærming: Ved å bruke funksjonell tilnærming må jeg endre tilbaketrekningsfunksjonen min, som allerede er testet og basert. Og legg til en metode som nedenfor vil ta seg av nye krav.
OOPs tilnærming: Ved å bruke OOPs tilnærming trenger du bare å skrive en ny klasse med unik implementering av uttaksfunksjonen. Vi rørte aldri den testede kodebiten.
Enda en endringsforespørsel
Hva om kravet endres ytterligere? Liker å legge til kredittkortkonto med sitt eget unike krav til innskudd.
Strukturell tilnærming: Ved å bruke strukturell tilnærming må du endre testet innskuddskode igjen.
OOPs tilnærming: Men ved å bruke objektorientert tilnærming, vil du bare lage en ny klasse med sin unike implementering av innskuddsmetoden (markert rødt i bildet nedenfor). Så selv om den strukturelle programmeringen virker som en enkel tilnærming i utgangspunktet, vinner OOP på lang sikt.
Fordeler med arv i OOPs
Men man kan hevde at på tvers av alle klasser har du en gjentatt kodebit.
For å overvinne dette, oppretter du en foreldreklasse, sier "konto" og implementerer den samme funksjonen for innskudd og uttak. Og gjør barneklasser til en arvet "konto"-klasse. Slik at de skal ha tilgang til uttaks- og innskuddsfunksjoner i kontoklasse. Det kreves ikke at funksjonene implementeres individuelt. Dette er Arv i java. .