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 }
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
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 .
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.
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 .
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.
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 .