what is inheritance java tutorial with examples
Denne vejledning forklarer begrebet Arv i Java, relaterede udtryk som 'udvider' og 'super' nøgleord, underklasse, superklasse, Is-A, HAS-A-relationer osv .:
Efter at have lært om de tre søjler i OOP, nemlig abstraktion, indkapsling og polymorfisme i Java, kommer vi til den sidste søjle i OOP, dvs. arv.
Startende med denne tutorial vil vi diskutere arv i Java i de næste par tutorials.
=> Læs gennem Easy Java Training Series.
Hvad du vil lære:
Arv i Java
Arv i Java kan defineres som en teknik eller proces, hvor et objekt i en klasse tilegner sig et andet objekts opførsel og egenskaber. Dette gøres ved at arve klassen eller etablere et forhold mellem to klasser.
For eksempel, en frø er et padde. Ligesom andre dyr i amfibiklassen kan Frog have mange egenskaber, der er fælles for andre dyr. Så her er en padde en art, og dyr som frøer er dens medlemmer.
Hvis vi skal repræsentere padderne og dens medlemmer i en softwarepræsentation ved hjælp af OOP, så hvad vi vil gøre er, at vi udvikler en klasse 'Amfibier', der indeholder egenskaber eller adfærd, der er almindelig for padder generelt.
På denne måde behøver vi ikke kopiere de fælles egenskaber og adfærd for hvert padde dyr, vi beskriver. Vi opretter direkte en klasse hver for padder og arver fra klassen Amfibier som vist nedenfor.
Så en generel idé bag funktionen 'Arv' er, at vi kan oprette nye klasser ved at arve fra de allerede eksisterende klasser. Ved at arve fra de allerede eksisterende klasser, får vi brug for disse klassers egenskaber og opførsel. Desuden kan vi tilføje flere egenskaber og / eller adfærd i vores nye klasse.
Arvefunktion skildrer en “ forælder-barn ”Forbindelse eller forhold i Java. Klassen, hvorfra den nye klasse arves, kaldes ” Forældreklasse ”Mens den nye klasse kaldes“ Børneklasse ”.
Arv bruges hovedsageligt:
- Til metode tilsidesættelse så vi kan opnå runtime polymorfisme .
- Til genbrug koden . Ved at arve fra de allerede eksisterende klasser sikrer vi, at genanvendelighed af kode.
Almindelig terminologi brugt i arv
- Genanvendelighed: Mekanisme, hvormed nye klasser genbruger felter eller egenskaber og metoder for en eksisterende klasse.
- Klasse: En klasse er en samling af objekter, der har fælles egenskaber. En klasse kan ses som en skabelon eller et blåtryk for objekterne.
- Underklasse / barneklasse: En klasse, der arver fra en anden klasse, er en underklasse eller en barneklasse eller en afledt klasse.
- Super klasse / overordnet klasse: En klasse, der arves af en anden klasse for at erhverve egenskaber og metoder, kaldes en overordnet klasse eller superklasse eller en basisklasse.
Følgende arvehierarki er et eksempel på en superklasse og en underklasse.
Vi har en medarbejderklasse med felter OrganisationName og EmployeeId. Det kan også have andre felter som medarbejdernavn, afdeling og andre medarbejderoplysninger.
Derefter udlede vi en anden klasse ved navn 'SoftwareDeveloper' med feltets løn og frynsegoder. Klassen SoftwareDeveloper arver fra medarbejderklassen, og dermed erhverver den også egenskaberne for medarbejderklassen.
Som vist i ovenstående diagram er medarbejderklassen her en Super- eller Base-klasse, og SoftwareDeveloper er en underklasse eller afledt klasse.
'Udvider' nøgleord i Java
I Java bruges nøgleordet 'udvider' til at arve klassen.
Den generelle syntaks for Java-arv er angivet nedenfor:
class SubClass extends SuperClass { //subclass methods and fields }
Som vist ovenfor vises nøgleordet 'udvider' efter klassenavnet i klassedeklarationens syntaks.
Nøgleordet 'udvider' formidler, at vi opretter en ny klasse 'SubClass', der vil arve egenskaberne og adfærden fra 'SuperClass'. Med andre ord indikerer det udvidede nøgleord, at vi bygger en ny klasse SubClass på den eksisterende funktionalitet i SuperClass.
Arven implementeret med nøgleordet 'udvider' er klassearven. I den næste vejledning diskuterer vi et andet nøgleord 'implementerer', hvor vi kan arve grænseflader.
Et eksempel på klassen Employee-SoftwareDeveloper, som vi har forklaret ovenfor, kan repræsenteres som:
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
IS-A og HAR-A-forhold
Overvej følgende klassestruktur:
class Mammal{ } class Cow extends Mammal{ }
Så hvordan kan vi fortolke ovenstående struktur? Når ko-klassen udvider eller arver pattedyr, kan vi sige “ko ER EN Pattedyr ”eller” Ko ER en slags Pattedyr'. Derfor, når vi udtrykker sådanne forhold, er det særlige forhold 'IS_A' -forholdet.
I ovenstående struktur brugte vi arvehierarkiet til at udtrykke det faktum, at en slags er af en anden art. Så i ovenstående struktur brugte vi en arv til at indikere forholdet mellem ko og pattedyr.
På samme måde kan vi udtrykke nogle flere IS-A-forhold som følger:
Ovenstående er nogle af de almindelige eksempler på relationer, som vi kan udtrykke ved hjælp af arv i Java.
Generelt kan IS-A slags forhold udtrykkes ved hjælp af arv.
Lad os nu se eksemplet nedenfor:
I ovenstående diagram ser vi, at et køretøj er vist at have to dele, dvs. motor og bremse. Så hvordan kan vi sætte ord på dette scenario?
Vi kan sige, at “et køretøj indeholder en motor og et køretøj indeholder en bremse ”.
Så det, vi udtrykker her, er ikke 'IS-A' -forholdet, men et indeslutningsforhold, hvor vi specificerer et objekt som en del af et andet objekt.
hvordan man åbner bin-filer i Android
I ovenstående eksempel er en motor en en del af køretøj. Det er ikke et ” slags ”Køretøj. Dette er ' HAR EN ”Eller indeslutnings- eller kompositionsforhold i Java. Has-a-forholdet i Java udtrykkes ved at inkludere et objekt som medlem af klassen.
Så hvis vi følger det samme køretøjseksempel ovenfor, kan vi udtrykke det som nedenfor:
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
Så et køretøj har en motor og en bremse. Ved at udtrykke forholdet på ovenstående måde er vi ikke interesseret i den interne implementering af motor eller bremse. Køretøjsklassen vil lade motor- og bremseklasser vide, hvad der er nødvendigt, og disse klasser vil give det.
Ligesom IS-A-forholdet er HAS-A-forhold også nyttigt ved genbrug af koden.
I denne vejledning vil vi diskutere arv (IS-A) i detaljer, og i den næste tutorial vil vi diskutere indeslutning eller sammensætning (HAS-A).
Eksempel på Java-arv
Lad os implementere et simpelt eksempel i Java for at 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 } }
Produktion:
Ovenstående program viser et simpelt eksempel på arv. En BaseClass med en metode erklæres. Derefter erklæres en anden klasse DerivedClass, der udvider BaseClass. Denne klasse har også en metode.
I programmets hovedmetode opretter vi et DerivedClass-objekt, og ved hjælp af dette objekt kalder vi BaseClass såvel som DerivedClass-metoden.
Outputtet viser meddelelserne, der er udskrevet ved begge metoder. Da DerivedClass udvider BaseClass og BaseClass-metoden er offentlig, er den synlig for DerivedClass.
'Super' nøgleord i Java
I arv beskæftiger vi os med superklasser eller forældreklasser og barneklasser. Hvis vi skal have mellemliggende adgang til superklassemedlemmer inklusive variabler, metoder eller konstruktører, så er vi nødt til at have en eller anden mekanisme. Denne mekanisme til at få adgang til baseklassemedlemmerne findes i Java ved hjælp af et 'super' nøgleord.
Så i hvilke scenarier bruger vi 'super' nøgleordet i Java?
Nedenfor vises scenarier, hvor et 'super' nøgleord kan være nyttigt.
- Når super / baseklassen og under / afledt klasse har de samme navne for medlemmer, og vi ønsker at få adgang til superklassemedlemmer, så bruger vi super-nøgleordet.
- Når vi ønsker at få adgang til superklassekonstruktøren fra underklassen, bruger vi supernøgleordet til at påberåbe sig superklassens nøgleord.
I ovenstående figur har vi vist en arvestruktur. I basen såvel som den afledte klasse har vi en strengvariabel myStr. I derivatedClass har vi en printStr () -funktion. I denne metode har vi brugt 'super' nøgleordet til at få adgang til myStr-variablen fra basisklassen.
I figuren har vi vist pilene, der peger på basisklassemedlemvariablen og afledt klassevariabel.
Lad os nu se programmeringseksemplerne for at bruge super-nøgleordet til at få adgang til forskellige superklassemedlemmer.
# 1) Få adgang til Superclass Member Variable
Det følgende Java-program demonstrerer brugen af et 'super' nøgleord for at få adgang 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 (); } }
Produktion:
Ovenstående program viser, hvordan man får adgang til medlemsvariablerne i baseklassen fra den afledte klasse, når medlemsvariablerne erklæres med samme navn både i basen såvel som den afledte klasse.
Her har vi myStr-variablen, der er deklareret i såvel basis som afledt klasse. I metoden printdetails henviser vi til myStr-variablen i baseklassen ved hjælp af “super.myStr”, mens den afledte klassevariabel myStr er tilgængelig direkte uden nogen kvalifikator.
# 2) Få adgang til Superclass-metoden
Dernæst vil vi se, hvordan man kalder baseklassemetoden, når metoden i baseklassen og metoden i den afledte klasse har de samme navne.
Det 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 (); } }
Produktion:
# 3) Få adgang til Superclass Constructor
Når vi arver en klasse fra en anden, skal du være opmærksom på, at konstruktørerne ikke arves.
Hvis vi vil udføre instruktioner fra superklassekonstruktørerne, før vi udfører den afledte klassekonstruktør, kan vi også kalde superklassekonstruktøren ved hjælp af 'super' nøgleordet.
For at ringe til superklassekonstruktøren bruger vi metodekaldet.
super (parameterliste ...)
Den følgende metode viser adgangen 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(); } }
Produktion:
Som vi kan se fra ovenstående program, har vi kaldt konstruktøren af superklassen fra den afledte klassekonstruktør. Bemærk, at ved konvention, når vi ønsker at få adgang til superklassekonstruktøren, skal det være den første sætning i konstruktøren for den afledte klasse.
Da basisklassen har en parameteriseret konstruktør, videregiver vi også den relevante parameter til superopkaldet, mens vi kalder konstruktøren.
Hvis der ikke foretages noget eksplicit opkald til superkonstruktøren som ovenfor, tilføjer compileren altid et implicit opkald til super () automatisk. Men bemærk, at dette vil være et opkald til superklassens standardkonstruktør.
Ofte stillede spørgsmål
Q # 1) Hvad er arv i Java?
Svar: En proces, hvorved en klasse tilegner sig en anden klasses egenskaber og adfærd kaldes arv. I Java arves en klasse af en anden klasse ved hjælp af nøgleordet 'udvider'.
Arv fremmer genanvendelighed af kode, da vi ved at arve kan erhverve og bruge de allerede eksisterende egenskaber og opførsel af en arvet klasse uden at skulle skrive duplikatkode.
Q # 2) Hvorfor bruges arv i Java?
Svar: Arv bruges hovedsageligt til at forbedre applikationens genanvendelighed. Ved hjælp af arv kan vi bruge klare klasser i vores applikation. Vi behøver ikke at skrive vores kode, hvis vi har funktionaliteten klar.
Den anden brug af arv er i tilsidesættelse af metoden. For at implementere runtime polymorfisme bruger vi arv.
Q # 3) Hvad er fordelene ved arv?
Svar: Genanvendelighed er den største fordel ved arv. Deling af kode gennem arv resulterer også i bedre læsbarhed og bedre organisering af kode.
Vi kan også opnå runtime polymorfisme gennem tilsidesættelse af metoden ved hjælp af arv.
Spørgsmål nr. 4) Hvad er funktionerne i arv?
Svar: Ethvert kendetegn eller træk erhvervet fra den ældre generation sker gennem arv. For eksempel, det lys-øje-træk, der forekommer i mange familier, er et eksempel på arv.
Fra et programmeringsperspektiv giver arv funktionen genanvendelighed og tilsidesættelse af metode.
programmer, der bruger c ++
Q # 5) Er super () nødvendigt?
Svar: Nej. For hvis vi ikke kalder super (), gør compileren det implicit for os. Men så er implicit påkaldelse af super () standardbaseklassekonstruktøren. Så hvis vi har brug for en parameteriseret konstruktør fra en basisklasse, så skal vi kalde det eksplicit.
Konklusion
I denne vejledning introducerede vi begrebet arv i Java. Arv er processen med at erhverve egenskaber og adfærd for en klasse i en anden klasse. Vi diskuterede den grundlæggende definition og terminologi, vi bruger i arv her.
Vi har også diskuteret Is-A og Has-A relationer i Java. Arv bruges til at implementere et Is-A-forhold.
Derefter diskuterede vi de 'udvider' og 'super' nøgleord i Java, der bruges i forbindelse med arven. Extends bruges til at implementere arv. Super-nøgleordet bruges til at henvise til basisklassekonstruktøren, metoden eller variablen fra den afledte klasse.
=> Tjek den perfekte Java-træningsvejledning her.
Anbefalet læsning
- Java Scanner-klassevejledning med eksempler
- Hvad er Java Vector | Java Vector Class Tutorial med eksempler
- Java Enum: Java-optællingsvejledning med eksempler
- Java strenglængde () Metode med eksempler
- Java Float Tutorial med programmeringseksempler
- Arv i C ++
- Typer af arv i C ++
- Python OOP-koncepter (Python-klasser, objekter og arv)