what is inheritance java tutorial with examples
Denna handledning förklarar begreppet Inheritance in Java, relaterade termer som 'utökar' och 'super' nyckelord, underklass, superklass, Is-A, HAS-A-relationer etc.:
Efter att ha lärt oss om de tre pelarna i OOP, nämligen abstraktion, inkapsling och polymorfism i Java, kommer vi till den sista pelaren i OOP, dvs. arv.
Från och med den här guiden kommer vi att diskutera arv i Java i nästa par tutorials.
=> Läs igenom Easy Java Training Series.
Vad du kommer att lära dig:
Arv i Java
Arv i Java kan definieras som en teknik eller process där ett objekt i en klass förvärvar ett annat objekts beteende och egenskaper. Detta görs genom att ärva klassen eller skapa en relation mellan två klasser.
Till exempel, en groda är en amfibie. Liksom andra djur i amfibieklassen kan groda ha många egenskaper som är gemensamma för andra djur. Så här är en amfibie en art och djur som grodor är dess medlemmar.
Om vi måste representera amfibiearterna och dess medlemmar i en programvarurepresentation med OOP, så kommer vi att utveckla en klass 'Amfibier' som innehåller egenskaper eller beteenden som är vanliga för amfibier i allmänhet.
På detta sätt behöver vi inte kopiera de vanliga egenskaperna och beteendet för varje amfibiedjur vi beskriver. Vi skapar direkt en klass vardera för amfibiedjur och ärver från amfibieklassen enligt nedan.
Så en allmän idé bakom funktionen 'Arv' är att vi kan skapa nya klasser genom att ärva från de redan existerande klasserna. Genom att ärva från de redan existerande klasserna får vi använda egenskaperna och beteendet hos dessa klasser. Dessutom kan vi lägga till fler egenskaper och / eller beteende i vår nya klass.
Arvsfunktionen visar en ” förälder-barn ”Anslutning eller relation i Java. Klassen från vilken den nya klassen ärvs kallas ” Föräldraklass ”Medan den nya klassen kallas” Barnklass ”.
Arv används främst:
- För metod som åsidosätter så att vi kan uppnå runtime polymorfism .
- Till återanvänd koden . Genom att ärva från de redan existerande klasserna säkerställer vi att återanvändbarhet av kod.
Vanlig terminologi som används i arv
- Återanvändbarhet: Mekanism genom vilken nya klasser återanvänder fält eller egenskaper och metoder för en befintlig klass.
- Klass: En klass är en samling objekt som har gemensamma egenskaper. En klass kan ses som en mall eller ett blått tryck för objekten.
- Underklass / barnklass: En klass som ärver från en annan klass är en underklass eller en barnklass eller en härledd klass.
- Superklass / föräldraklass: En klass som ärvs av en annan klass för att förvärva egenskaper och metoder kallas förälderklass eller superklass eller basklass.
Följande arvshierarki är ett exempel som visar en superklass och underklass.
Vi har en anställdsklass med fälten OrganisationName och EmployeeId. Det kan också ha andra fält som anställds namn, avdelning och annan information om anställda.
Sedan får vi en annan klass som heter 'SoftwareDeveloper' med fältets lön och förmåner. Klassen SoftwareDeveloper ärver från medarbetarklassen och förvärvar därmed också egenskaperna för medarbetarklassen.
Som visas i ovanstående diagram, här är anställdsklassen en Super- eller basklass och SoftwareDeveloper är en underklass eller härledd klass.
'Förlänger' nyckelord i Java
I Java används nyckelordet ”extends” för att ärva klassen.
Den allmänna syntaxen för Java-arv ges nedan:
class SubClass extends SuperClass { //subclass methods and fields }
Som visas ovan visas nyckelordet ”utökar” efter klassnamnet i syntaxen för klassdeklarationen.
Nyckelordet 'förlänger' förmedlar att vi skapar en ny klass 'SubClass' som kommer att ärva egenskaperna och beteendet från 'SuperClass'. Med andra ord indikerar det utvidgade nyckelordet att vi bygger en ny klass SubClass på den existerande funktionaliteten i SuperClass.
Arvet som implementeras med nyckelordet 'utökar' är klassens arv. I nästa handledning kommer vi att diskutera ett annat nyckelord ”implementerar” med vilket vi kan ärva gränssnitt.
Ett exempel på klassen Employee-SoftwareDeveloper som vi har förklarat ovan kan representeras som:
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
IS-A och HAR-A-förhållande
Tänk på följande klassstruktur:
class Mammal{ } class Cow extends Mammal{ }
Så hur kan vi tolka ovanstående struktur? När ko-klassen utvidgar eller ärver däggdjur kan vi säga ”Ko ÄR EN Däggdjur ”eller” Ko ÄR ett slags Däggdjur'. Därför närhelst vi uttrycker sådana relationer, är det specifika förhållandet 'IS_A' -förhållandet.
I ovanstående struktur använde vi arvshierarkin för att uttrycka det faktum att ett slag är av ett annat slag. Så i ovanstående struktur använde vi ett arv för att indikera förhållandet mellan ko och däggdjur.
På samma sätt kan vi uttrycka några fler IS-A-relationer enligt följande:
Ovanstående är några av de vanligaste exemplen på relationer som vi kan uttrycka med hjälp av arv i Java.
I allmänhet kan IS-A-typen av relationer uttryckas med hjälp av arv.
Låt oss nu se exemplet nedan:
I ovanstående diagram ser vi att ett fordon visas med två delar, dvs. motor och broms. Så hur kan vi sätta ord på detta scenario?
Vi kan säga att ”ett fordon innehåller en motor och ett fordon innehåller en broms ”.
Så det vi uttrycker här är inte 'IS-A' -förhållandet utan ett inneslutningsförhållande där vi specificerar ett objekt som en del av ett annat objekt.
hur man öppnar bin-filer i Windows
I exemplet ovan är en motor en del av fordon. Det är inte ett ” ungefär ' fordon. Det här är ' HAR EN ”Eller förhållande eller komposition i Java. Has-a-relationen i Java uttrycks genom att inkludera ett objekt som medlem i klassen.
Så om vi följer samma fordonsexempel ovan kan vi uttrycka det som nedan:
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
Så ett fordon har en motor och en broms. Genom att uttrycka förhållandet på ovanstående sätt är vi inte intresserade av den interna implementeringen av motor eller broms. Fordonsklassen låter motor- och bromsklasserna veta vad som behövs och dessa klasser kommer att tillhandahålla det.
Liksom IS-A-förhållandet är HAS-A-förhållande också användbart för att återanvända koden.
I denna handledning kommer vi att diskutera arv (IS-A) i detalj och i nästa handledning kommer vi att diskutera inneslutning eller komposition (HAS-A).
Exempel på Java-arv
Låt oss implementera ett enkelt exempel i Java för att visa 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:
Ovanstående program visar ett enkelt exempel på arv. En basklass med en metod deklareras. Sedan förklaras en annan klass DerivedClass som utökar BaseClass. Denna klass har också en metod.
I programmets huvudmetod skapar vi ett DerivedClass-objekt och med det här objektet kallar vi BaseClass och DerivedClass-metoden.
Utdata visar meddelanden som skrivs ut med båda metoderna. Eftersom DerivedClass utökar BaseClass och BaseClass-metoden är offentlig, är den synlig för DerivedClass.
'Super' nyckelord i Java
In Arv behandlar vi superklasser eller föräldraklasser och barnklasser. Om vi måste få tillgång till superklassmedlemmar, inklusive variabler, metoder eller konstruktörer, måste vi ha någon mekanism. Denna mekanism för åtkomst till basklassmedlemmarna tillhandahålls i Java med ett 'super' nyckelord.
Så i vilka scenarier använder vi 'super' nyckelordet i Java?
Nedan listas scenarier där ett ”super” -nyckelord kan vara till hjälp.
- När super / basklassen och sub / härledda klassen har samma namn för medlemmar, och vi vill komma åt superklassmedlemmar, använder vi supernyckelordet.
- När vi vill komma åt superklasskonstruktören från underklassen använder vi supernyckelordet för att åberopa superklassnyckelordet.
I figuren ovan har vi visat en arvsstruktur. I såväl bas som härledd klass har vi en strängvariabel myStr. I derivatedClass har vi en printStr () -funktion. I den här metoden har vi använt 'super' nyckelordet för att komma åt myStr-variabeln från basklassen.
I figuren har vi visat pilarna som pekar på basklassmedelsvariabeln och härledd klassvariabel.
Låt oss nu se programmeringsexemplen för att använda supernyckelordet för att komma åt olika superklassmedlemmar.
# 1) Få åtkomst till variabel för superklassmedlem
Följande Java-program visar användningen av ett ”super” -nyckelord för att komma åt variabler från basklassen.
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:
Ovanstående program visar hur du får åtkomst till basklassens medlemsvariabler från den härledda klassen när medlemsvariablerna deklareras med samma namn både i bas- och härledd klass.
Här har vi myStr-variabeln som deklareras i både basklass och härledd klass. I metoden printdetails hänvisar vi till myStr-variabeln i basklassen med hjälp av “super.myStr” medan den härledda klassvariabeln myStr nås direkt utan någon kvalificering.
# 2) Åtkomst till superklassmetoden
Därefter ser vi hur man kallar basklassmetoden när metoden i basklassen och metoden i den härledda klassen har samma namn.
Följande program visar detta.
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) Åtkomst till Superclass Constructor
När vi ärver en klass från en annan, notera att konstruktörerna inte ärvs.
Om vi vill utföra instruktioner från superklasskonstruktörerna innan vi kör den härledda klasskonstruktören kan vi också ringa superklasskonstruktören med hjälp av 'super' nyckelordet.
För att ringa superklasskonstruktören använder vi metodanropet.
super (parameterlista ...)
Följande metod visar åtkomsten till 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 från ovanstående program har vi kallat superklassens konstruktör från den härledda klasskonstruktören. Observera att enligt konvention, när vi vill komma åt superklasskonstruktören, bör det vara det första uttalandet i konstruktorn för den härledda klassen.
Eftersom basklassen har en parametrerad konstruktör skickar vi också lämplig parameter till superanropet medan vi anropar konstruktorn.
Om det inte görs något uttryckligt samtal till superkonstruktören enligt ovan, lägger kompilatorn alltid automatiskt till ett implicit samtal till super (). Men notera att detta kommer att bli ett samtal till superklassens standardkonstruktör.
Vanliga frågor
F # 1) Vad är arv i Java?
Svar: En process genom vilken en klass förvärvar egenskaperna och beteendet hos en annan klass kallas arv. I Java ärvs en klass av en annan klass med hjälp av nyckelordet 'extends'.
Arv främjar återanvändbarhet av kod eftersom vi genom att ärva kan förvärva och använda redan befintliga egenskaper och beteende hos en ärvd klass utan att behöva skriva duplikatkod.
F # 2) Varför används arv i Java?
Svar: Arv används främst för att förbättra applikationen återanvändbar. Med hjälp av arv kan vi använda färdiga klasser i vår applikation. Vi behöver inte skriva vår kod om vi har funktionaliteten redo.
vad är en 7z-fil?
Den andra användningen av arv är i åsidosättande av metod. För att implementera polymorfism under körning använder vi arv.
F # 3) Vilka är fördelarna med arv?
Svar: Återanvändbarhet är den viktigaste fördelen med arv. Delning av kod genom arv resulterar också i bättre läsbarhet och bättre organisering av kod.
Vi kan också uppnå polymorfism under körning genom metodöverstyrning med arv.
F # 4) Vilka är funktionerna i Arv?
Svar: Alla egenskaper eller egenskaper som förvärvats från den äldre generationen görs genom arv. Till exempel, det ljus-öga-drag som förekommer i många familjer är ett exempel på arv.
Ur programmeringssynpunkt ger arv funktionen återanvändbarhet och metodöverstyrning.
F # 5) Är super () nödvändigt?
Svar: Nej. För om vi inte kallar super () gör kompilatorn det implicit för oss. Men då är implicit anrop av super () standardbasklasskonstruktören. Så om vi behöver en parametrerad konstruktör från en basklass, bör vi kalla det uttryckligen.
Slutsats
I denna handledning introducerade vi begreppet Inheritance in Java. Arv är processen att förvärva egenskaperna och beteendet hos en klass i en annan klass. Vi diskuterade den grundläggande definitionen och terminologin vi använder i arv här.
Vi har också diskuterat Is-A och Has-A-förhållandena i Java. Arv används för att implementera en Is-A-relation.
Sedan diskuterade vi 'extends' och 'super' nyckelorden i Java som används i samband med arvet. Extends används för att implementera arv. Super-nyckelordet används för att referera till basklasskonstruktören, metoden eller variabeln från den härledda klassen.
=> Kolla in den perfekta Java-träningsguiden här.
Rekommenderad läsning
- Java Scanner-klasshandledning med exempel
- Vad är Java Vector | Java Vector Class Tutorial med exempel
- Java Enum: Java-uppräkningshandledning med exempel
- Java Stränglängd () Metod med exempel
- Java Float Tutorial med programmeringsexempel
- Arv i C ++
- Typer av arv i C ++
- Python OOP-begrepp (Python-klasser, objekt och arv)