types inheritance java single vs multiple inheritance
Uz jednostavne primjere naučite sve o raznim vrstama nasljeđivanja u Javi. Doznajte podržava li Java višestruko nasljeđivanje:
Čitateljima smo u našem posljednjem vodiču predstavili nasljeđivanje na Javi, zajedno s raznim osnovnim konceptima povezanim s nasljeđivanjem.
U ovom uputstvu istražit ćemo dalje temu nasljeđivanja i naučiti više o vrstama nasljeđivanja.
=> Ovdje provjerite SVE Java tutorijale.
najbolje aplikacije za špijuniranje nekoga
Što ćete naučiti:
Vrste nasljeđivanja u Javi
Ovisno o načinu nasljeđivanja klasa i broju naslijeđenih klasa, imamo sljedeće vrste nasljeđivanja kao što je prikazano na donjoj slici.
Kao što je prikazano na gornjoj slici, postoji pet vrsta nasljeđivanja u objektno orijentiranom programiranju kako je opisano u nastavku:
# 1) Jedno nasljeđivanje: Kada izvedena klasa ili podrazred nasljeđuje samo jednu bazu ili superklasu, to je jedno nasljeđivanje.
# 2) Višerazinsko nasljeđivanje: U višerazinskom nasljeđivanju imamo više razina u kojima klasa nasljeđuje osnovnu klasu, a izvedenu klasu nasljeđuje druga klasa.
# 3) Hijerarhijsko nasljeđivanje: Hijerarhija nasljeđivanja formira se u ovoj vrsti nasljeđivanja kada superklasu nasljeđuje više klasa.
# 4) Višestruko nasljeđivanje: Višestruko nasljeđivanje je ono u kojem klasa može naslijediti svojstva i ponašanje od više roditelja.
# 5) Hibridno nasljeđivanje: Kada se kombiniraju jedna ili više vrsta nasljeđa, tada ono postaje hibridno nasljeđe.
Imajte na umu da Java podržava samo naslijeđivanje s jednim, više nivoa i hijerarhijsko nasljeđivanje pomoću klasa. Java ne podržava višestruko i hibridno nasljeđivanje s klasama.
Sada ćemo detaljno razgovarati o svakoj vrsti nasljeđivanja s primjerima programiranja.
Jedno nasljeđivanje u Javi
Jedno nasljedstvo prikazano je kako je prikazano dolje:
Ovdje se podrazred nasljeđuje iz jednog superrazreda. Ovo je jedno nasljeđe. Bilo koja životinja poput Psa nasljeđuje od Životinjske vrste. Ovo je najjednostavniji oblik nasljeđivanja.
Slijedi Java program koji objašnjava jedno nasljeđivanje.
//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 } }
Izlaz:
Ovdje imamo jednu metodu jesti (Action_eat) u osnovnoj klasi Animal koja je zajednička životinjskim vrstama. Imamo izvedenu klasu Pas koja potječe iz klase Animal. U klasi Pas imamo metodu specifičnu za pseće vrste, koru (Action_bark).
Tada u glavnoj metodi kreiramo objekt Dog, a kako je klasa Dog naslijedila klasu Animal, ovaj objekt može pozvati i jesti, kao i kora kore.
Višerazinsko nasljeđivanje u Javi
U nasljeđivanju na više razina imamo lanac nasljeđivanja. To znači da imamo roditeljsku klasu koju nasljeđuje izvedena klasa. Izvedeni razred zauzvrat djeluje kao roditelj drugom razredu i tako dalje.
Nasljeđivanje na više razina može se predstaviti na sljedeći način:
Kao što se vidi na gornjoj slici, postoji roditeljska klasa A. Klasa B nasljeđuje od klase A. Zatim postoji još jedna klasa C koja pak nasljeđuje od klase B. Tako možemo vidjeti da ona čini lanac nasljeđivanja. Ovdje klasa B postaje posrednička klasa koja povezuje klase A i C.
Nastavljajući s našim primjerom klase Animal u nastavku, možemo imati klasu Dog koja je izvedena iz klase Animal. Tada možemo dobiti još jedan razred šteneta koji je dječji pas izveden iz razreda pasa. Na ovaj način možemo dobiti nasljeđivanje na više razina.
Primjer programa za višerazinsko nasljeđivanje prikazan je u nastavku.
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 } }
Izlaz:
Programirali smo točno prikazani lanac gore. Zatim u glavnoj metodi stvaramo objekt klase C. Objekt klase C tada može pristupiti metodama svog roditelja B kao i djeda A.
Hijerarhijsko nasljeđivanje u Javi
Klasa može iz nje izvesti više klasa. Dakle, imamo jednu bazu ili superrazred i više podklasa. Ova vrsta nasljeđivanja naziva se „hijerarhijsko nasljeđivanje“.
Hijerarhijsko nasljeđivanje shematski je predstavljeno u nastavku:
Kao primjer hijerarhijskog nasljeđivanja, možemo predstaviti klasu Animal kao superklasu, a zatim iz nje izvedemo više životinja poput Mačke, Psa, Krave itd.
Java program u nastavku pokazuje hijerarhijsko nasljeđivanje u Javi.
//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 } }
Izlaz:
Kao što vidimo iz programa, imamo roditeljski razred i tri podređena razreda izvedena od ovog roditelja. U glavnoj metodi stvaramo objekt svake od podređenih klasa i pozivamo njihove odgovarajuće metode članova.
Za pozivanje metoda nadređene klase imajte na umu da možemo koristiti bilo koji objekt podređene klase jer svi imaju pristup nadređenoj klasi.
Višestruko nasljeđivanje u Javi
Višestruko nasljeđivanje je situacija u kojoj jedna klasa može naslijediti više klasa, tj. Jedna klasa može imati više roditelja. Čineći to, klasa može imati više od jedne superrazrede i tako steći svojstva i ponašanje svih svojih superklasa.
Dijagramski prikaz višestrukog nasljeđa prikazan je u nastavku:
Kao što je gore prikazano, možemo izvesti razred iz više razreda istodobno. Na taj će način izvedena klasa steći značajke svih svojih roditeljskih klasa. To može dovesti do ozbiljnih nejasnoća, posebno kada su naslijeđene značajke iste.
Bilješka:Java ne podržava višestruko nasljeđivanje pomoću klasa. Ali podržava višestruko nasljeđivanje pomoću sučelja o čemu ćemo razgovarati u sljedećem vodiču o nasljeđivanju.
Budući da Java ne podržava višestruko nasljeđivanje s klasama, nećemo ulaziti u detalje. Međutim, kasnije u ovom uputstvu pokušat ćemo razumjeti razloge koji Java ne podržavaju višestruko nasljeđivanje.
Hibridno nasljeđivanje u Javi
Hibridno nasljeđivanje kombinacija je jedne ili više vrsta nasljeđa o kojima smo gore govorili. Bilo koja kombinacija, međutim, rezultira vrstom višestrukog nasljeđivanja koje Java ne podržava.
Hibridno nasljeđe može se shematski predstaviti na sljedeći način.
Stoga Java ne podržava hibridno nasljeđivanje kao ni s klasama. No, poput višestrukog nasljeđivanja, hibridno nasljeđivanje možemo implementirati u Javi pomoću sučelja. O tome ćemo detaljno razgovarati u sljedećem vodiču.
Zašto Java ne podržava višestruko nasljeđivanje?
Java teži jednostavnosti u programima. To se odnosi čak i na OOP značajke. Dakle, kada je riječ o višestrukom nasljeđivanju, mogu se pojaviti neke dvosmislene situacije kada klasu izvedemo iz više klasa.
Ajmo sada razumjeti probleme koji se mogu pojaviti kada u svom programu imamo višestruko nasljeđivanje.
Razmotrite sljedeće sustave višestrukog nasljeđivanja.
Ako vidimo gornji sustav, to je samorazumljivo. Ovdje su klasa A i klasa dvoroditeljske klase koje je naslijedila klasa C. Sada smo pokazali da i klase A i B imaju metodu s istim imenom, tj. Print (). Dakle, kada klasa C naslijedi A i B, tada će dobiti obje verzije metode print ().
U ovom slučaju, klasa C neće znati koju bi metodu trebala naslijediti. Ovo je dvosmislena situacija koju smo gore spomenuli i koja se javlja u slučaju višestrukog nasljeđivanja.
što može reproducirati .swf datoteke
Stoga Java izdaje pogrešku kompajlera kada klasa nasljeđuje više od jedne klase.
Sljedeći Java program to će pokazati.
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(); } }
Izlaz:
Kao što se vidi iz rezultata, Java kompajler izdaje pogrešku kad utvrdi da klasa proširuje dvije klase.
Iako Java ne dopušta nasljeđivanje dviju klasa istovremeno, nudi nam put oko ovog ograničenja. Možemo simulirati višestruko nasljeđivanje koristeći sučelja umjesto klasa. O tome ćemo raspravljati u našim sljedećim vodičima.
Dijamantni problem
Višestruko nasljeđivanje rezultira situacijom koja se naziva 'Dijamantni problem'.
Uzmite u obzir da imamo sljedeći sustav nasljeđivanja.
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 }
Ovaj sustav možemo shematski predstaviti kako je prikazano u nastavku:
Kao što vidimo iz gornjeg dijagrama, cijeli se sustav nasljeđivanja pojavljuje u obliku dijamanta. Zbog ove dijamantne strukture, dvosmislenost je nazvana 'Dijamantni problem'.
Kao što je ranije objašnjeno za višestruko nasljeđivanje, ovdje je dvoznačnost višestruki broj kopija metode show () koje klasa Sample dobiva kao rezultat nasljeđivanja. Budući da postoji više putova, postiže se metoda show () i postoji nejasnoća u vezi koju kopiju naslijediti.
Kao i kod višestrukog nasljeđivanja, problem dijamanta također se može riješiti pomoću sučelja.
Pravila nasljeđivanja u Javi
Do sada smo vidjeli osnove nasljeđivanja kao i vrste nasljeđivanja na Javi, navedimo neka pravila koja moramo slijediti tijekom razvoja aplikacija s nasljeđivanjem.
Pravilo # 1: Java ne podržava višestruko nasljeđivanje
Kao što smo već vidjeli, Java ne podržava višestruko nasljeđivanje u bilo kojem obliku. Kada se u programu pokuša višestruko nasljeđivanje, Java kompajler izdaje pogrešku kompajlera.
Pravilo # 2: Java ne dopušta ciklično nasljeđivanje
Klasa koja nasljeđuje sebe kako bi formirala ciklus naziva se cikličkim nasljeđivanjem.
Razmotrite sljedeće razrede, razred1 i razred2.
razred class1 proširuje klasu 2 {}
razred class2 proširuje razred 1 {}
Gore navedena situacija čini petlju. To nije dopušteno na Javi.
Pravilo # 3: Ne možemo naslijediti članove privatnih podataka
Već smo u temi 'Modifikatori pristupa' naučili da se članovi s privatnim pristupom ne mogu nasljeđivati.
Pravilo # 4: Konstruktori se ne nasljeđuju
Kako se konstruktori koriste za stvaranje objekata klase, oni se ne nasljeđuju iz jedne klase u drugu.
Pravilo br. 5: Za pristup podređenim objektima možemo koristiti roditeljsku referencu
Već smo vidjeli razne primjere nasljeđivanja. Možemo stvoriti referencu tipa roditeljske klase, a zatim joj dodijeliti izvedeni objekt klase stvoren pomoću nove ključne riječi.
Ako je super superrazred, a podrazred je izveden iz super, kao što je prikazano u nastavku.
class super{} class sub extends super{ public static void main(String() args){ super s_obj = new sub(); } }
Pravilo # 6: Nadređeni konstruktori izvršavaju se zbog super () u izvedenim konstruktorima
Jedno od pravila kaže da se konstruktori ne mogu naslijediti. Ali konstruktor superklase može se izvršiti unutar konstruktora izvedene klase pomoću poziva super ().
Često postavljana pitanja
P # 1) Koju vrstu nasljeđivanja Java ne podržava?
Odgovor: Java ne podržava višestruko nasljeđivanje jer može stvoriti probleme u aplikacijama poput problema s dijamantom. Java također ne podržava hibridno nasljeđivanje jer je kombinacija jednog ili više tipova nasljeđivanja i na kraju se može pretvoriti u više nasljeđivanja.
P # 2) Tko se od članova razreda može naslijediti?
Odgovor: Klasa može naslijediti javne i zaštićene članove svoje osnovne klase, ali ne može pristupiti privatnim članovima osnovne klase.
P # 3) Zašto višestruko nasljeđivanje nije dopušteno?
Odgovor: Višestruko nasljeđivanje rezultira dvosmislenošću kada dvoroditeljske klase imaju metode s istim prototipom. U ovom se slučaju izvedena klasa suočava s dvosmislenošću u vezi s tim koja bi osnovna klasa trebala naslijediti metodu.
Višestruko nasljeđivanje također može rezultirati problemom s dijamantima u Javi. Stoga Java ne podržava višestruko nasljeđivanje.
P # 4) Zašto vam je potrebno višestruko nasljeđivanje?
Odgovor: Jezici poput Java i C # provode višestruko nasljeđivanje pomoću više sučelja. Dakle, kada trebamo naslijediti značajke s više od jednog sučelja, tada nam je potrebno višestruko nasljeđivanje.
P # 5) Koja je glavna upotreba višerazinskog nasljeđivanja?
Odgovor: Za klasu izvedenu iz druge klase koja je pak izvedena iz treće klase kaže se da pokazuje višerazinsko nasljeđivanje. Razine u ovoj vrsti nasljeđivanja mogu se proširiti na bilo koji broj dokle god održavaju jasnoću i jednostavnost.
Pomoću višerazinskog nasljeđa možemo prikazati različite razine vrsta. S programskog gledišta, kada želimo predstavljati različite razine klasa aplikacija, tada idemo na nasljeđivanje na više razina.
Zaključak
U ovom uputstvu raspravljali smo o vrstama nasljeđivanja u Javi. Java podržava samo jedno, višerazinsko i hijerarhijsko nasljeđivanje. Java ne podržava višestruko i hibridno nasljeđivanje. Raspravljali smo o dvosmislenosti višestrukog nasljeđivanja i dijamantnom problemu u Javi.
Zatim smo razgovarali o raznim pravilima kojih bismo se trebali pridržavati tijekom implementacije nasljeđivanja u Javi. Ovim smo završili našu raspravu o odnosu IS-A u Javi.
=> Ovdje pripazite na jednostavnu seriju Java treninga.
Preporučena literatura
- Što je nasljeđivanje u Javi - Vodič sa primjerima
- Nasljeđivanje u C ++
- Vrste nasljeđivanja u C ++
- Osnove Java: Java sintaksa, Java klasa i osnovni koncepti Java
- Java Integer i Java BigInteger klasa s primjerima
- Vrste nastave u Javi: sažetak, konkretno, završno, statično
- Java varijable i njihove vrste s primjerima
- Vodič za razred Java Scannera s primjerima