logo

Rodzaje dziedziczenia w Javie

Dziedzictwo jest najpotężniejszą cechą programowania obiektowego. Pozwala nam dziedziczyć właściwości jednej klasy do innej klasy. W tej części omówimy rodzaje dziedziczenia w Javie szczegółowo opierając się na przykładach z życia wziętych. Stworzymy także programy w języku Java realizujące koncepcję różnych typów dziedziczenia.

listy lateksowe

Dziedzictwo

Dziedzictwo jest mechanizmem wypierania nowej klasy z klasy już istniejącej. Istniejąca (stara) klasa jest znana jako klasa bazowa Lub super klasa Lub klasa rodzicielska . Nowa klasa nosi nazwę a Klasy pochodnej Lub podklasa Lub klasa dziecka . Pozwala nam wykorzystać właściwości i zachowanie jednej klasy (rodzica) w innej klasie (dziecko).

Klasę, której właściwości są dziedziczone, nazywamy klasą klasa rodzicielska a klasa, która dziedziczy właściwości klasy nadrzędnej, jest znana jako klasa dziecka . W ten sposób ustanawia relację między klasą nadrzędną a klasą podrzędną, znaną jako rodzic-dziecko lub Jest relacja.

Załóżmy, że istnieją dwie klasy nazwane Ojciec I Dziecko i chcemy dziedziczyć właściwości klasy Ojciec w klasie Dziecko. Możemy to osiągnąć za pomocą rozciąga się słowo kluczowe.

 //inherits the properties of the Father class class Child extends Father { //functionality } 

Rodzaje dziedziczenia w Javie

Kiedy powinniśmy korzystać z dziedziczenia?

Dziedziczenie zapewnia możliwość ponownego użycia kodu, zwłaszcza gdy istnieje duża skala kodu do ponownego wykorzystania. Ustala także relację między różnymi klasami, znaną jako a Jest relacja. Możemy go również użyć, jeśli chcemy osiągnąć nadpisanie metody .

Punkty do zapamiętania

  • Konstruktora nie można dziedziczyć w Javie.
  • Członkowie prywatni nie są dziedziczeni w Javie.
  • Dziedziczenie cykliczne nie jest dozwolone w Javie.
  • Przypisz odniesienie nadrzędne do obiektów podrzędnych.
  • Konstruktory są wykonywane z powodu obecności super() w konstruktorze.

Rodzaje dziedziczenia

Java obsługuje następujące cztery typy dziedziczenia:

  • Pojedyncze dziedzictwo
  • Dziedziczenie wielopoziomowe
  • Dziedziczenie hierarchiczne
  • Dziedziczenie hybrydowe
Rodzaje dziedziczenia w Javie

Uwaga: w Javie nie jest obsługiwane dziedziczenie wielokrotne.

Omówmy każdy z nich na odpowiednim przykładzie.

co to jest modulo w c++

Pojedyncze dziedzictwo

W dziedziczeniu pojedynczym podklasa pochodzi tylko z jednej nadklasy. Dziedziczy właściwości i zachowanie klasy z jednym rodzicem. Czasami jest to również tzw proste dziedziczenie .

Rodzaje dziedziczenia w Javie

Na powyższym rysunku Pracownik jest klasą nadrzędną, a Wykonawczy jest klasą podrzędną. Klasa Executive dziedziczy wszystkie właściwości klasy Pracownik.

Zaimplementujmy mechanizm pojedynczego dziedziczenia w programie Java.

Executive.java

 class Employee { float salary=34534*12; } public class Executive extends Employee { float bonus=3000*6; public static void main(String args[]) { Executive obj=new Executive(); System.out.println('Total salary credited: '+obj.salary); System.out.println('Bonus of six months: '+obj.bonus); } } 

Wyjście:

 Total salary credited: 414408.0 Bonus of six months: 18000.0 

Dziedziczenie wielopoziomowe

W dziedziczenie wielopoziomowe , klasa wywodzi się z klasy, która również wywodzi się z innej klasy, nazywa się to dziedziczeniem wielopoziomowym. W prostych słowach możemy powiedzieć, że klasa, która ma więcej niż jedną klasę nadrzędną, nazywa się dziedziczeniem wielopoziomowym. Pamiętaj, że zajęcia muszą być na różnych poziomach. Zatem istnieje jedna klasa bazowa i jedna klasa pochodna, ale istnieje wiele pośrednich klas bazowych.

Rodzaje dziedziczenia w Javie

Na powyższym rysunku klasa Marks dziedziczy elementy lub metody klasy Students. Klasa Sports dziedziczy elementy klasy Marks. Dlatego klasa Student jest klasą nadrzędną klasy Marks, a klasa Marks jest rodzicem klasy Sports. Zatem klasa Sports domyślnie dziedziczy właściwości Studenta wraz z klasą Marks.

Zaimplementujmy mechanizm dziedziczenia wielopoziomowego w programie Java.

Przykład dziedziczenia wielopoziomowego.java

 //super class class Student { int reg_no; void getNo(int no) { reg_no=no; } void putNo() { System.out.println('registration number= '+reg_no); } } //intermediate sub class class Marks extends Student { float marks; void getMarks(float m) { marks=m; } void putMarks() { System.out.println('marks= '+marks); } } //derived class class Sports extends Marks { float score; void getScore(float scr) { score=scr; } void putScore() { System.out.println('score= '+score); } } public class MultilevelInheritanceExample { public static void main(String args[]) { Sports ob=new Sports(); ob.getNo(0987); ob.putNo(); ob.getMarks(78); ob.putMarks(); ob.getScore(68.7); ob.putScore(); } } 

Wyjście:

niedeterministyczne automaty skończone
 registration number= 0987 marks= 78.0 score= 68.7 

Dziedziczenie hierarchiczne

Jeśli z jednej klasy bazowej wywodzi się kilka klas, nazywa się to dziedziczenie hierarchiczne .

Rodzaje dziedziczenia w Javie

Na powyższym rysunku klasy Science, Commerce i Arts dziedziczą jedną klasę nadrzędną o nazwie Student.

Zaimplementujmy mechanizm dziedziczenia hierarchicznego w programie Java.

HierarchicalInheritanceExample.java

 //parent class class Student { public void methodStudent() { System.out.println('The method of the class Student invoked.'); } } class Science extends Student { public void methodScience() { System.out.println('The method of the class Science invoked.'); } } class Commerce extends Student { public void methodCommerce() { System.out.println('The method of the class Commerce invoked.'); } } class Arts extends Student { public void methodArts() { System.out.println('The method of the class Arts invoked.'); } } public class HierarchicalInheritanceExample { public static void main(String args[]) { Science sci = new Science(); Commerce comm = new Commerce(); Arts art = new Arts(); //all the sub classes can access the method of super class sci.methodStudent(); comm.methodStudent(); art.methodStudent(); } } 

Wyjście:

 The method of the class Student invoked. The method of the class Student invoked. The method of the class Student invoked. 

Dziedziczenie hybrydowe

Środki hybrydowe składają się z więcej niż jednego. Dziedziczenie hybrydowe to połączenie dwóch lub więcej typów dziedziczenia.

Rodzaje dziedziczenia w Javie

Na powyższym rysunku Dziadek jest superklasą. Klasa Ojciec dziedziczy właściwości klasy GrandFather. Ponieważ Ojciec i Dziadek reprezentują jedno dziedzictwo. Co więcej, klasa Ojca jest dziedziczona przez klasę Syna i Córki. W ten sposób Ojciec staje się klasą nadrzędną dla Syna i Córki. Klasy te reprezentują dziedziczenie hierarchiczne. Łącznie oznacza dziedziczenie hybrydowe.

losowy c

Zaimplementujmy mechanizm dziedziczenia hybrydowego w programie Java.

Córka.java

 //parent class class GrandFather { public void show() { System.out.println('I am grandfather.'); } } //inherits GrandFather properties class Father extends GrandFather { public void show() { System.out.println('I am father.'); } } //inherits Father properties class Son extends Father { public void show() { System.out.println('I am son.'); } } //inherits Father properties public class Daughter extends Father { public void show() { System.out.println('I am a daughter.'); } public static void main(String args[]) { Daughter obj = new Daughter(); obj.show(); } } 

Wyjście:

 I am daughter. 

Dziedziczenie wielokrotne (nieobsługiwane)

Java nie obsługuje wielokrotnego dziedziczenia ze względu na niejednoznaczność. Rozważmy na przykład następujący program Java.

tablica Java

Demo.java

 class Wishes { void message() { System.out.println('Best of Luck!!'); } } class Birthday { void message() { System.out.println('Happy Birthday!!'); } } public class Demo extends Wishes, Birthday //considering a scenario { public static void main(String args[]) { Demo obj=new Demo(); //can't decide which classes' message() method will be invoked obj.message(); } } 

Powyższy kod powoduje błąd, ponieważ kompilator nie może zdecydować, która metoda Message() ma zostać wywołana. Z tego powodu Java nie obsługuje wielokrotnego dziedziczenia na poziomie klasy, ale można to osiągnąć poprzez: interfejs .