what is inheritance java tutorial with examples
Denne opplæringen forklarer begrepet Arv i Java, relaterte termer som 'utvider' og 'super' nøkkelord, underklasse, superklasse, Is-A, HAS-A-relasjoner osv .:
Etter å ha lært om de tre søylene i OOP, nemlig abstraksjon, innkapsling og polymorfisme i Java, kommer vi til den siste søylen i OOP, dvs. arv.
Fra og med denne veiledningen vil vi diskutere arv i Java i de neste par opplæringene.
=> Les gjennom Easy Java Training Series.
Hva du vil lære:
Arv i Java
Arv i Java kan defineres som en teknikk eller prosess der ett objekt i en klasse tilegner seg atferd og egenskaper til et annet objekt. Dette gjøres ved å arve klassen eller etablere et forhold mellom to klasser.
For eksempel, en frosk er et amfibie. Som andre dyr i amfibiklassen, kan frosk ha mange egenskaper som er felles for andre dyr. Så her er en padde en art, og dyr som frosker er dens medlemmer.
Hvis vi må representere amfibie-artene og dens medlemmer i en programvarrepresentasjon ved hjelp av OOP, er det vi vil gjøre at vi vil utvikle en klasse 'Amfibier' som inneholder egenskaper eller atferd som er vanlig for amfibier generelt.
På denne måten trenger vi ikke å duplisere de vanlige egenskapene og oppførselen til hvert amfibiedyr vi beskriver. Vi lager direkte en klasse hver for amfibiedyr og arver fra amfibiklassen som vist nedenfor.
Så en generell ide bak funksjonen 'Arv' er at vi kan opprette nye klasser ved å arve fra de allerede eksisterende klassene. Ved å arve fra de allerede eksisterende klassene får vi bruke egenskapene og oppførselen til disse klassene. Dessuten kan vi legge til flere egenskaper og / eller atferd i den nye klassen.
Arvfunksjon skildrer en “ foreldre-barn ”Forbindelse eller forhold i Java. Klassen som den nye klassen er arvet fra, kalles “ Foreldreklasse ”Mens den nye klassen kalles“ Barneklasse ”.
Arv brukes hovedsakelig:
- Til metode overstyrende slik at vi kan oppnå kjøretid polymorfisme .
- Til gjenbruk koden . Ved å arve fra allerede eksisterende klasser, sikrer vi at gjenbrukbarhet av kode.
Vanlig terminologi brukt i arv
- Gjenbrukbarhet: Mekanisme der nye klasser gjenbruker felt eller egenskaper og metoder for en eksisterende klasse.
- Klasse: En klasse er en samling objekter som har felles egenskaper. En klasse kan sees på som en mal eller en blå utskrift for objektene.
- Underklasse / barneklasse: En klasse som arver fra en annen klasse er en underklasse eller en barneklasse eller en avledet klasse.
- Superklasse / foreldreklasse: En klasse som arves av en annen klasse for å tilegne seg egenskaper og metoder kalles en overordnet klasse eller superklasse eller en basisklasse.
Følgende arvehierarki er et eksempel som viser en superklasse og underklasse.
Vi har en medarbeiderklasse med felt OrganisationName og EmployeeId. Det kan også ha andre felt som ansattes navn, avdeling og andre medarbeideropplysninger.
Deretter avleder vi en annen klasse som heter ‘SoftwareDeveloper” med feltets lønn og fordeler. Klassen SoftwareDeveloper-arven arver fra medarbeiderklassen, og dermed tilegner den seg også egenskapene til medarbeiderklassen.
Som vist i diagrammet ovenfor, her er medarbeiderklassen en Super- eller Base-klasse og SoftwareDeveloper er en underklasse eller avledet klasse.
‘Utvider’ nøkkelord i Java
I Java brukes nøkkelordet ‘extends’ for å arve klassen.
Den generelle syntaksen for Java-arv er gitt nedenfor:
class SubClass extends SuperClass { //subclass methods and fields }
Som vist ovenfor vises nøkkelordet 'utvider' etter klassenavnet i syntaksen for klassedeklarasjonen.
Nøkkelordet 'utvider' formidler at vi lager en ny klasse 'SubClass' som vil arve egenskapene og oppførselen fra 'SuperClass'. Med andre ord, det utvidede nøkkelordet indikerer at vi bygger en ny klasse SubClass på den eksisterende funksjonaliteten til SuperClass.
Arven implementert med søkeordet 'utvider' er klassearv. I neste opplæring vil vi diskutere et annet nøkkelord ‘implementerer’ ved hjelp av hvilket vi kan arve grensesnitt.
Et eksempel på Employee-SoftwareDeveloper-klassen som vi har forklart ovenfor kan vises som:
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
IS-A og HAR-A-forhold
Tenk på følgende klassestruktur:
class Mammal{ } class Cow extends Mammal{ }
Så hvordan kan vi tolke strukturen ovenfor? Når ku-klassen utvider eller arver pattedyr, kan vi si “ku ER EN Pattedyr ”eller” Ku ER en slags Pattedyr'. Derfor, når vi uttrykker slike forhold, er det spesielle forholdet 'IS_A' -forholdet.
I strukturen ovenfor brukte vi arvehierarkiet for å uttrykke det faktum at en type er av en annen art. Så i strukturen ovenfor brukte vi en arv for å indikere forholdet mellom ku og pattedyr.
På samme måte kan vi uttrykke noen flere IS-A-forhold som følger:
Ovenfor er noen av de vanligste eksemplene på relasjoner som vi kan uttrykke ved hjelp av arv i Java.
Generelt kan IS-A slags forhold uttrykkes ved hjelp av arv.
La oss nå se eksemplet nedenfor:
I diagrammet ovenfor ser vi at et kjøretøy er vist å ha to deler, dvs. motor og brems. Så hvordan kan vi sette ord på dette scenariet?
Vi kan si at “et kjøretøy inneholder en motor og et kjøretøy inneholder en brems ”.
Så det vi uttrykker her er ikke 'IS-A' -forholdet, men et inneslutningsforhold hvor vi spesifiserer ett objekt som en del av et annet objekt.
bruker ipad for salgsstedet
I eksemplet ovenfor er en motor en del av kjøretøy. Det er ikke en “ på en måte ”Kjøretøy. Dette er ' HAR EN ”Eller inneslutning eller komposisjonsforhold i Java. Has-a-forholdet i Java uttrykkes ved å inkludere et objekt som medlem av klassen.
Så hvis vi følger det samme kjøretøyeksemplet ovenfor, så kan vi uttrykke det som nedenfor:
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
Så et kjøretøy har motor og brems. Ved å uttrykke forholdet på ovennevnte måte er vi ikke interessert i den interne implementeringen av motor eller brems. Kjøretøyklassen vil fortelle motor- og bremseklasser hva som trengs, og disse klassene vil gi det.
I likhet med IS-A-forholdet, er HAS-A-forhold også nyttig for å gjenbruke koden.
I denne opplæringen vil vi diskutere arv (IS-A) i detalj, og i neste opplæring vil vi diskutere inneslutning eller komposisjon (HAS-A).
Eksempel på Java-arv
La oss implementere et enkelt eksempel i Java for å demonstrere arv.
//example class demonstrating Inheritance in Java class BaseClass { public void display() { System.out.println('BaseClass::Display'); } } //create a new class from BaseClass class DerivedClass extends BaseClass { public void print() { System.out.println('DerivedClass::print'); } } class Main { public static void main(String[] args) { //create an object of DerivedClass DerivedClass d1 = new DerivedClass(); d1.display(); //call BaseClass method d1.print(); //call DerivedClass method } }
Produksjon:
Ovennevnte program viser et enkelt eksempel på arv. En BaseClass med én metode er erklært. Deretter erklæres en annen klasse DerivedClass som utvider BaseClass. Denne klassen har også en metode.
I hovedmetoden til programmet lager vi et DerivedClass-objekt og bruker dette objektet vi kaller BaseClass så vel som DerivedClass-metoden.
Utgangen viser meldingene som er skrevet ut med begge metodene. Da DerivedClass utvider BaseClass og BaseClass-metoden er offentlig, er den synlig for DerivedClass.
‘Super’ nøkkelord i Java
I Arv håndterer vi superklasser eller foreldreklasser og barneklasser. Hvis vi må få tilgang til superklassemedlemmer, inkludert variabler, metoder eller konstruktører, må vi ha en mekanisme. Denne mekanismen for tilgang til baseklassemedlemmene er gitt i Java ved hjelp av et 'super' nøkkelord.
Så i hvilke scenarier bruker vi ‘super’ nøkkelordet i Java?
Her er scenarier der et ‘super’ nøkkelord kan være nyttig.
- Når super / baseklassen og under / avledet klasse har samme navn for medlemmer, og vi vil ha tilgang til superklassemedlemmer, bruker vi supernøkkelordet.
- Når vi vil få tilgang til superklassekonstruktøren fra underklassen, bruker vi supernøkkelordet til å påkalle superklassens nøkkelord.
I figuren ovenfor har vi vist en arvestruktur. I basen så vel som den avledede klassen har vi en strengvariabel myStr. I derivatedClass har vi en printStr () -funksjon. I denne metoden har vi brukt ‘super’ nøkkelordet for å få tilgang til myStr-variabelen fra baseklassen.
I figuren har vi vist pilene som peker på basisklassemedlemvariabelen og avledet klassevariabel.
La oss nå se programmeringseksemplene for å bruke supernøkkelordet for å få tilgang til forskjellige superklassemedlemmer.
# 1) Få tilgang til Superclass Member Variable
Følgende Java-program demonstrerer bruken av et 'super' nøkkelord for å få tilgang til variabler fra basisklassen.
class Baseclass { String myStr; } class Subclass extends Baseclass { String myStr; public void printdetails() //Baseclass and Subclass have variables with same name { super.myStr = 'Super'; //refers to parent class member myStr = 'Sub'; System.out.println('Superclass myStr :' + super.myStr+' and Subclass myStr:'+myStr); } } class Main{ public static void main(String[] args) { Subclass cobj = new Subclass(); cobj. printdetails (); } }
Produksjon:
Ovennevnte program viser hvordan du får tilgang til medlemsvariablene i baseklassen fra den avledede klassen når medlemsvariablene blir deklarert med samme navn både i basen så vel som den avledede klassen.
Her har vi myStr-variabelen som er erklært i basen så vel som avledet klasse. I metoden printdetails refererer vi til myStr-variabelen til baseklassen ved bruk av 'super.myStr' mens den avledede klassevariabelen myStr er tilgjengelig direkte uten noen kvalifisering.
# 2) Få tilgang til Superclass-metoden
Deretter vil vi se hvordan man kan kalle baseklassemetoden når metoden i baseklassen og metoden i den avledede klassen har samme navn.
Følgende program demonstrerer dette.
class Parent { String myStr; public void print() //parent class method { myStr = 'Parent class myStr'; System.out.println(myStr); } } class Child extends Parent { String myStr; public void print() //child class method with same name as parent { super.print(); //call Parent class print() method myStr = 'Child class myStr'; System.out.println(myStr); } } class Main{ public static void main(String[] args) { Child c_obj = new Child(); c_obj.print (); } }
Produksjon:
# 3) Få tilgang til Superclass Constructor
Når vi arver en klasse fra en annen, vær oppmerksom på at konstruktørene ikke arves.
Hvis vi ønsker å utføre noen instruksjoner fra superklassekonstruktørene før vi utfører den avledede klassekonstruktøren, kan vi også ringe superklassekonstruktøren ved å bruke 'super' nøkkelordet.
For å ringe superklassekonstruktøren bruker vi metoden samtale.
super (parameterliste ...)
Følgende metode viser tilgangen til superkonstruktører i Java.
class Parent { String myStr; public Parent(String name) //base class constructor { myStr = name; } } class Child extends Parent { String myStr; public Child(String name1, String name2) { super(name1); //call base class constructor and pass argument value this.myStr = name2; } public void printDetails() //print details of both constructors { System.out.println('From base class constructor: ' +super.myStr); System.out.println('From derived class constructor: ' + myStr); } } class Main{ public static void main(String[] args) { Child cobj = new Child('Super constructor string','Child constructor string'); cobj.printDetails(); } }
Produksjon:
Som vi kan se fra programmet ovenfor, har vi kalt konstruktøren til superklassen fra den avledede klassekonstruktøren. Merk at når det er vanlig, når vi ønsker å få tilgang til superklassekonstruktøren, bør det være den første setningen i konstruktøren til den avledede klassen.
Siden baseklassen har en parameterisert konstruktør, sender vi også den riktige parameteren til superanropet mens vi ringer til konstruktøren.
Hvis det ikke er gjort noe eksplisitt anrop til superkonstruktøren som ovenfor, legger kompilatoren alltid et implisitt anrop til super () automatisk. Men vær oppmerksom på at dette vil være et kall til standardkonstruktøren til superklassen.
ofte stilte spørsmål
Q # 1) Hva er arv i Java?
Svar: En prosess der en klasse tilegner seg egenskapene og oppførselen til en annen klasse kalles arv. I Java arves en klasse av en annen klasse ved å bruke søkeordet 'utvider'.
hvordan åpne en torrent-fil på Windows
Arv fremmer gjenbrukbarhet av kode, ettersom vi ved å arve kan skaffe og bruke de allerede eksisterende egenskapene og oppførselen til en arvet klasse uten å måtte skrive duplikatkode.
Q # 2) Hvorfor brukes arv i Java?
Svar: Arv brukes hovedsakelig for å forbedre gjenbrukbarheten av applikasjonen. Ved å bruke arv kan vi bruke klare klasser i applikasjonen vår. Vi trenger ikke å skrive koden vår hvis vi har funksjonaliteten klar.
Den andre bruken av arv er i overordnet metode. For å implementere kjøretidspolymorfisme bruker vi arv.
Q # 3) Hva er fordelene med arv?
Svar: Gjenbrukbarhet er den viktigste fordelen ved arv. Deling av kode gjennom arv resulterer også i bedre lesbarhet og bedre organisering av kode.
Vi kan også oppnå polymorfisme ved kjøretid ved å overstyre metoden ved hjelp av arv.
Q # 4) Hva er funksjonene til Arv?
Svar: Enhver egenskap eller egenskap som ervervet fra den eldre generasjonen gjøres gjennom arv. For eksempel, lys-øye-egenskapen som forekommer i mange familier er et eksempel på arv.
Fra et programmeringsperspektiv gir arv funksjonen til gjenbrukbarhet og metodeoverstyring.
Q # 5) Er super () nødvendig?
Svar: Nei. Hvis vi ikke kaller super (), gjør kompilatoren det implisitt for oss. Men så er implisitt påkallelse av super () standard baseklasskonstruktør. Så hvis vi trenger en parameterisert konstruktør fra en basisklasse, bør vi kalle det eksplisitt.
Konklusjon
I denne veiledningen introduserte vi konseptet med arv i Java. Arv er prosessen med å tilegne seg egenskapene og oppførselen til en klasse i en annen klasse. Vi diskuterte den grunnleggende definisjonen og terminologien vi bruker i arv her.
Vi har også diskutert Is-A og Has-A relasjonene i Java. Arv brukes til å implementere et Is-A-forhold.
Deretter diskuterte vi ‘extends’ og ‘super’ nøkkelordene i Java som brukes i forbindelse med arven. Extends brukes til å implementere arv. Supernøkkelordet brukes til å referere til basisklassekonstruktøren, metoden eller variabelen fra den avledede klassen.
=> Ta en titt på den perfekte Java-treningsveiledningen her.
Anbefalt lesing
- Java-skanner klasseveiledning med eksempler
- Hva er Java Vector | Java Vector Class Tutorial med eksempler
- Java Enum: Opplæring i Java-oppregning med eksempler
- Java strenglengde () Metode med eksempler
- Java Float Tutorial med programmeringseksempler
- Arv i C ++
- Typer arv i C ++
- Python OOPs-konsepter (Python-klasser, gjenstander og arv)