logo

Наследяване в Java

  1. Наследство
  2. Видове наследство
  3. Защо множественото наследяване не е възможно в Java в случай на клас?

Наследяване в Java е механизъм, при който един обект придобива всички свойства и поведение на родителски обект. То е важна част от OOPs (Обектно ориентирана система за програмиране).

Идеята зад наследяването в Java е, че можете да създавате нови класове които са изградени върху съществуващи класове. Когато наследявате от съществуващ клас, можете да използвате повторно методи и полета на родителския клас. Освен това можете да добавяте нови методи и полета и в текущия си клас.

Наследството представлява IS-A връзка който е известен също като a родител-дете връзка.

Защо да използвате наследяване в java

Термини, използвани в Наследяване

    клас:Класът е група от обекти, които имат общи свойства. Това е шаблон или план, от който се създават обекти.Подклас/Дете клас:Подкласът е клас, който наследява другия клас. Нарича се още производен клас, разширен клас или дъщерен клас.Супер клас/клас родител:Суперкласът е класът, от който подкласът наследява функциите. Нарича се още базов клас или родителски клас.Повторна употреба:Както уточнява името, повторната употреба е механизъм, който ви улеснява да използвате повторно полетата и методите на съществуващия клас, когато създавате нов клас. Можете да използвате същите полета и методи, които вече са дефинирани в предишния клас.

Синтаксисът на наследяването на Java

 class Subclass-name extends Superclass-name { //methods and fields } 

The разширява ключова дума показва, че създавате нов клас, който произлиза от съществуващ клас. Значението на „разширява“ е да увеличи функционалността.

масив от обекти в java

В терминологията на Java клас, който е наследен, се нарича родител или суперклас, а новият клас се нарича дете или подклас.


Пример за наследяване на Java

Наследяване в Java

Както е показано на фигурата по-горе, Programmer е подкласът, а Employee е суперкласът. Връзката между двете класи е Програмистът Е Служител . Това означава, че програмистът е вид служител.

q1 q2 q3 q4
 class Employee{ float salary=40000; } class Programmer extends Employee{ int bonus=10000; public static void main(String args[]){ Programmer p=new Programmer(); System.out.println('Programmer salary is:'+p.salary); System.out.println('Bonus of Programmer is:'+p.bonus); } } 
Тествайте сега
 Programmer salary is:40000.0 Bonus of programmer is:10000 

В горния пример обектът Programmer има достъп до полето на собствен клас, както и на клас Employee, т.е. повторно използване на кода.


Видове наследяване в java

Въз основа на класа може да има три типа наследяване в java: единично, многостепенно и йерархично.

В програмирането на Java множественото и хибридно наследяване се поддържа само чрез интерфейс. Ще научим за интерфейсите по-късно.

Видове наследяване в Java

Забележка: Множественото наследяване не се поддържа в Java чрез клас.

Когато един клас наследява множество класове, това е известно като множествено наследяване. Например:

Множествено наследяване в Java

Единичен пример за наследяване

Когато един клас наследява друг клас, той е известен като a единично наследство . В примера, даден по-долу, клас Dog наследява класа Animal, така че има единично наследяване.

Файл: TestInheritance.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }} 

Изход:

 barking... eating... 

Пример за многостепенно наследяване

Когато има верига от наследяване, тя е известна като многостепенно наследяване . Както можете да видите в примера, даден по-долу, класът BabyDog наследява класа Dog, който отново наследява класа Animal, така че има многостепенно наследяване.

Файл: TestInheritance2.java

c# списък
 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class BabyDog extends Dog{ void weep(){System.out.println('weeping...');} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }} 

Изход:

 weeping... barking... eating... 

Пример за йерархично наследяване

Когато два или повече класа наследяват един клас, той е известен като йерархично наследство . В дадения по-долу пример класовете Dog и Cat наследяват класа Animal, така че има йерархично наследяване.

Файл: TestInheritance3.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class Cat extends Animal{ void meow(){System.out.println('meowing...');} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }} 

Изход:

java сравнява низове
 meowing... eating... 

В) Защо множественото наследяване не се поддържа в java?

За да се намали сложността и да се опрости езикът, множественото наследяване не се поддържа в java.

Помислете за сценарий, при който A, B и C са три класа. Класът C наследява класовете A и B. Ако класове A и B имат един и същ метод и го извиквате от обект на дъщерен клас, ще има неяснота при извикването на метода на клас A или B.

Тъй като грешките по време на компилиране са по-добри от грешките по време на изпълнение, Java изобразява грешка по време на компилиране, ако наследите 2 класа. Така че независимо дали имате същия или различен метод, ще има грешка във времето на компилиране.

 class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were public static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } } 
Тествайте сега
 Compile Time Error