types inheritance java single vs multiple inheritance
Lær alt om de forskjellige typer arv i Java ved hjelp av enkle eksempler. Finn ut om Java støtter flere arv:
Vi introduserte Arv i Java sammen med de forskjellige grunnleggende konseptene knyttet til arv til leserne i vår siste opplæring.
I denne veiledningen vil vi utforske videre i arvemnet og lære mer om arvtypene.
=> Sjekk ALLE Java-opplæringsprogrammer her.
hvor mye er quickbooks salgssted
Hva du vil lære:
Typer arv i Java
Avhengig av måten klassene arves og hvor mange klasser som arves, har vi følgende typer arv som vist i figuren nedenfor.
Som vist i figuren ovenfor, er det fem typer arv i objektorientert programmering som beskrevet nedenfor:
# 1) Enkeltarv: Når en avledet klasse eller underklasse arver fra bare en base eller superklasse, er det enkelt arv.
# 2) Arv på flere nivåer: I Multilevel Arv har vi mer enn ett nivå der en klasse arver fra en basisklasse og den avledede klassen i sin tur arves av en annen klasse.
# 3) Hierarkisk arv: Et arvshierarki dannes i denne typen arv når en superklasse arves av mer enn en klasse.
# 4) Flere arv: Flere arv er den der en klasse kan arve egenskaper og atferd fra mer enn en forelder.
# 5) Hybrid arv: Når en eller flere typer arv kombineres, blir det en hybrid arv.
Legg merke til at Java bare støtter enkelt, flernivå og hierarkisk type arv ved bruk av klasser. Java støtter ikke flere og hybrid arv med klasser.
Nå vil vi diskutere hver type arv i detalj med programmeringseksempler.
Enkelt arv i Java
En enkelt arv er avbildet som vist nedenfor:
Her arver en underklasse fra en enkelt superklasse. Dette er enkeltarv. Ethvert dyr som hund arver fra dyrearten. Dette er den enkleste formen for arv.
Nedenfor er et Java-program som forklarer Single Arv.
//base class:Animal class Animal { void Action_eat() { System.out.print('eating...'); } } //derived class:Dog class Dog extends Animal { void Action_bark() { System.out.print('barking...'); } } class Main{ public static void main(String args()){ Dog d=new Dog(); //create an object of derived class System.out.print('The dog is '); d.Action_bark(); //call derived class method System.out.print('
The dog is '); d.Action_eat(); //call base class method } }
Produksjon:
Her har vi en metode for å spise (Action_eat) i basisklassen Animal som er vanlig for dyrearter. Vi har en avledet klasse Hund som kommer fra dyreklassen. I hundeklassen har vi en metode spesifikk for hundearter, bark (Action_bark).
Deretter lager vi et hundeobjekt i hovedmetoden, og da hundeklassen har arvet dyreklassen, kan dette objektet kalle spise så vel som bjeffemetode.
Multilevel Arv i Java
I flernivåarv har vi en arvekjede. Dette betyr at vi har en overordnet klasse som arves av en avledet klasse. Avledet klasse fungerer igjen som foreldre til en annen klasse og så videre.
Flernivåarven kan vises som nedenfor:
Som det ses i figuren ovenfor, er det en overordnet klasse A. Klasse B arver fra klasse A. Deretter er det en annen klasse C som igjen arver fra klasse B. Dermed kan vi se at den danner en arvekjede. Her blir klasse B en mellomklasse som forbinder klassene A og C.
Fortsetter vi med eksemplet på dyreklasser nedenfor, kan vi få en hundeklasse avledet fra dyreklassen. Så kan vi ha en annen klasse valp som er en babyhund avledet fra hundeklassen. På denne måten kan vi ha arven på flere nivåer.
Et eksempel på program for Multilevel Arv er vist nedenfor.
import java.util.*; import java.lang.*; import java.io.*; //parent class A class A { public void print_A() { System.out.print('SoftwareTestingHelp '); } } //Derived class B - intermediary class B extends A { public void print_B() { System.out.print('Java Series '); } } //Derived Class C class C extends B { public void print_C() { System.out.print('Tutorials'); } } public class Main { public static void main(String() args) { C c_obj = new C(); //create Class C obj c_obj.print_A(); //call grandparent class method c_obj.print_B(); //call parent class method c_obj.print_C(); //call member method } }
Produksjon:
Vi har programmert den nøyaktige kjeden vist ovenfor. Så i hovedmetoden lager vi et objekt av klasse C. Klass C-objektet kan da få tilgang til metodene til sin overordnede B så vel som besteforeldre A.
Hierarkisk arv i Java
En klasse kan ha mer enn en klasse avledet fra den. Så vi har en base eller superklasse og mer enn én underklasse. Denne typen arv kalles “Hierarkisk arv”.
Den hierarkiske arven er diagrammatisk representert nedenfor:
Som et eksempel på hierarkisk arv, kan vi representere dyreklassen som en superklasse og deretter få mer enn ett dyr som katt, hund, ku, etc. avledet fra den.
Java-programmet nedenfor demonstrerer den hierarkiske arven i Java.
//class Parent class Parent { public void print_parent() { System.out.println('In ::Parent class'); } } //child1 class class Child1 extends Parent { public void print_child1() { System.out.println('In ::Child1 class'); } } //child2 class class Child2 extends Parent { public void print_child2() { System.out.println('In ::Child2 class'); } } //child3 class class Child3 extends Parent { public void print_child3() { System.out.println('In ::Child3 class'); } } public class Main { public static void main(String() args) { Child1 ch1 = new Child1(); //create a Child1 class object ch1.print_child1(); //call its member method Child2 ch2 = new Child2(); //create a Child2 class object ch2.print_child2(); //call its member method Child3 ch3 = new Child3(); //create a Child3 class object ch3.print_child3(); //call its member method ch3.print_parent(); //call parent class method with any object } }
Produksjon:
Som vi ser fra programmet har vi en foreldreklasse og tre barneklasser avledet av denne forelderen. I hovedmetoden lager vi et objekt for hver av barneklassene og kaller deres respektive medlemsmetoder.
For å kalle metodene til foreldreklassen, vær oppmerksom på at vi kan bruke noen av underordnede klasseobjekter, ettersom alle har tilgang til foreldreklassen.
Flere arv i Java
Flere arv er en situasjon der en klasse kan arve fra mer enn en klasse, dvs. en klasse kan ha mer enn en forelder. Ved å gjøre dette kan klassen ha mer enn én superklasse og dermed tilegne seg egenskapene og oppførselen til alle dens superklasser.
Diagrammatisk fremstilling av flere arv er vist nedenfor:
Som vist ovenfor kan vi utlede en klasse fra mer enn en klasse samtidig. På denne måten vil den avledede klassen tilegne seg funksjonene til alle foreldreklassene. Dette kan gi alvorlige uklarheter, spesielt når funksjonene som er arvet er de samme.
Merk:Java støtter ikke flere arv ved bruk av klasser. Men det støtter flere arv ved bruk av grensesnitt som vi vil diskutere i vår neste opplæring om arv.
Siden Java ikke støtter flere arv med klasser, vil vi ikke gå i detaljene. Senere i opplæringen vil vi imidlertid prøve å forstå årsakene bak Java som ikke støtter flere arv.
Hybrid arv i Java
Hybrid arv er en kombinasjon av en eller flere typer arv som vi har diskutert ovenfor. En hvilken som helst kombinasjon resulterer imidlertid i en type flere arv som ikke støttes av Java.
En hybridarv kan diagrammatisk vises som nedenfor.
Derfor støtter Java ikke hybrid arv så bra med klasser. Men som flere arv, kan vi implementere hybrid arv i Java ved hjelp av grensesnitt. Vi vil diskutere dette i detalj i vår neste opplæring.
Hvorfor støtter Java ikke flere arv?
Java tar sikte på enkelhet i programmer. Dette gjelder selv OOP-funksjoner. Så når det kommer til flere arv, kan det oppstå noen tvetydige situasjoner når vi henter en klasse fra mer enn en klasse.
La oss nå forstå problemene som kan oppstå når vi har flere arv i programmet vårt.
Vurder følgende flere arvssystemer.
Hvis vi ser systemet ovenfor, er det selvforklarende. Her er klasse A og klasse B toforelderklasser arvet av klasse C. Nå har vi vist at både klassene A og B har en metode med samme navn, dvs. utskrift (). Så når klasse C arver A og B, vil den få begge versjonene av print () -metoden.
I dette tilfellet vil klasse C ikke vite hvilken metode den skal arve. Dette er den tvetydige situasjonen vi nevnte ovenfor som oppstår i tilfelle flere arv.
Derfor utsteder Java en kompilatorfeil når klassen arver fra mer enn en klasse.
Følgende Java-program vil demonstrere dette.
class A{ void print(){ System.out.println('Class A :: print()'); } } class B{ void print(){ System.out.println('Class B :: print()'); } } class C extends A , B{ //let C inherit from A and B } public class Main { public static void main(String() args) { C cObj = new C(); c.print(); } }
Produksjon:
Som vist fra utdataene, utsteder Java-kompilatoren en feil når den finner ut at klassen utvider to klasser.
Selv om Java ikke tillater at to klasser arves samtidig, gir det oss en vei rundt denne begrensningen. Vi kan simulere flere arv ved bruk av grensesnitt i stedet for klasser. Vi vil diskutere dette i de påfølgende opplæringene våre.
hvordan lage en dobbeltkoblet liste java
Diamantproblem
Flere arv resulterer i en situasjon som kalles “Diamantproblem”.
Tenk på at vi har følgende arvesystem.
class Super{ void show(){} } class Sub1 extends super{ void show1(){} } class Sub2 extends super{ void show2(){} } class sample extends Sub1,Sub2{ //Sample class code here }
Vi kan representere dette systemet diagrammatisk som vist nedenfor:
Som vi kan se fra diagrammet ovenfor, vises hele arvesystemet i en diamantform. På grunn av denne diamantstrukturen blir tvetydigheten kalt 'Diamantproblemet'.
Som forklart tidligere for flere arv, er tvetydigheten her det antall kopier av show () -metoden som prøveklassen oppnår som et resultat av arv. Siden det er flere baner, oppnår man show () -metoden, og det er tvetydighet angående hvilken kopi man skal arve.
Som med flere arv, kan diamantproblemet også løses ved hjelp av grensesnitt.
Arvregler i Java
Inntil nå har vi sett det grunnleggende om arv så vel som arvetyper i Java, la oss liste opp noen regler som vi må følge når vi utvikler applikasjoner med arv.
Regel nr. 1: Java støtter ikke flere arv
Som vi allerede har sett, støtter Java ikke flere arv i noen form. Når flere arv forsøkes i et program, utsteder Java-kompilatoren kompilatorfeil.
Regel nr. 2: Java tillater ikke syklisk arv
En klasse som arver seg til å danne en syklus kalles Syklisk arv.
Tenk på følgende klasser, klasse1 og klasse2.
klasse klasse1 utvider klasse 2 {}
klasse klasse2 utvider klasse 1 {}
Ovennevnte situasjon danner en løkke. Dette er ikke tillatt i Java.
Regel 3: Vi kan ikke arve private datamedlemmer
Vi har allerede lært i 'Access modifiers' -emnet at medlemmer med privat tilgang ikke kan arves.
Regel 4: Konstruktører arves ikke
Ettersom konstruktører brukes til å lage klasseobjekter, arves de ikke fra en klasse til en annen.
Regel 5: Vi kan bruke foreldrehenvisning for å få tilgang til underordnede objekter
Vi har allerede sett forskjellige eksempler på arv. Vi kan opprette en referanse for typen overordnet klasse og deretter tildele den et avledet klasseobjekt opprettet ved hjelp av det nye nøkkelordet.
Hvis super er en superklasse og sub er klasse avledet fra super som vist nedenfor.
class super{} class sub extends super{ public static void main(String() args){ super s_obj = new sub(); } }
Regel nr. 6: Overordnede konstruktører utføres på grunn av super () i avledede konstruktører
En av reglene sier at konstruktører ikke kan arves. Men konstruktøren til superklassen kan utføres inne i konstruktøren til den avledede klassen ved hjelp av super () kall.
ofte stilte spørsmål
Q # 1) Hvilken type arv støttes ikke av Java?
Svar: Java støtter ikke flere arv, da det kan gi problemer i applikasjoner som diamantproblemet. Java støtter heller ikke hybridarv, da det er en kombinasjon av en eller flere arvetyper og til slutt kan bli til flere arv.
Q # 2) Hvilke av medlemmene i klassen kan arves?
Svar: En klasse kan arve offentlige og beskyttede medlemmer av basisklassen, men får ikke tilgang til de private medlemmene av baseklassen.
Sp # 3) Hvorfor er ikke flere arv tillatt?
Svar: Flere arv resulterer i tvetydighet når toforelderklasser har metoder med samme prototype. I dette tilfellet står den avledede klassen overfor en uklarhet om hvilken basisklasse den skal arve metoden.
Flere arv kan også resultere i et diamantproblem i Java. Derfor støtter Java ikke flere arv.
Q # 4) Hvorfor trenger du flere arv?
Svar: Språk som Java og C # håndhever flere arv ved bruk av flere grensesnitt. Så når vi trenger å arve funksjoner fra mer enn ett grensesnitt, så trenger vi flere arv.
Q # 5) Hva er den viktigste bruken av Multilevel Arv?
Svar: En klasse avledet fra en annen klasse som igjen er avledet fra en tredje klasse sies å utvise arv på flere nivåer. Nivåene i denne typen arv kan utvides til et hvilket som helst tall så lenge det opprettholder klarhet og enkelhet.
Vi kan skildre forskjellige nivåer av arter ved å bruke arv på flere nivåer. Fra programmeringsperspektivet, når vi vil representere ulike nivåer av applikasjonsklasser, så går vi for arv på flere nivåer.
Konklusjon
I denne opplæringen har vi diskutert typer arv i Java. Java støtter bare typer arv, flere nivåer og hierarkier. Java støtter ikke flere og hybrid arv. Vi har diskutert Multiple arv tvetydighet og Diamond problem i Java.
Deretter diskuterte vi de forskjellige reglene som vi bør følge når vi implementerer arv i Java. Med dette har vi fullført vår diskusjon om IS-A-forholdet i Java.
=> Se opp den enkle Java-treningsserien her.
Anbefalt lesing
- Hva er arv i Java - Veiledning med eksempler
- Arv i C ++
- Typer arv i C ++
- Java Basics: Java Syntax, Java Class og Core Java Concepts
- Java Integer og Java BigInteger Class med eksempler
- Typer klasser i Java: Abstrakt, Betong, Endelig, Statisk
- Java-variabler og deres typer med eksempler
- Java-skannerklasseopplæring med eksempler