В този урок ще научим за наследяването на Java и нейните типове с помощта на пример.
Наследяването е една от ключовите характеристики на ООП, която ни позволява да създадем нов клас от съществуващ клас.
Новият клас, който се създава, е известен като подклас (дъщерен или извлечен клас), а съществуващият клас, от който е извлечен дъщерният клас, е известен като суперклас (родителски или основен клас).
В extends
ключовата дума се използва за извършване на наследяване в Java. Например,
class Animal ( // methods and fields ) // use of extends keyword // to perform inheritance class Dog extends Animal ( // methods and fields of Animal // methods and fields of Dog )
В горния пример класът Dog се създава чрез наследяване на методите и полетата от класа Animal.
Тук Dog е подкласът, а Animal е суперкласът.
Пример 1: Наследяване на Java
class Animal ( // field and method of the parent class String name; public void eat() ( System.out.println("I can eat"); ) ) // inherit from Animal class Dog extends Animal ( // new method in subclass public void display() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access field of superclass labrador.name = "Rohu"; labrador.display(); // call method of superclass // using object of subclass labrador.eat(); ) )
Изход
Казвам се Роху мога да ям
В горния пример получихме подклас Dog от суперклас Animal. Забележете твърденията,
labrador.name = "Rohu"; labrador.eat();
Тук лабрадорът е обект на Куче. Обаче назовете и eat()
са членовете на класа Animal.
Тъй като Dog наследява полето и метода от Animal, ние имаме достъп до полето и метода, използвайки обекта на Dog.

е-връзка
В Java наследство е е-а взаимоотношения. Тоест, ние използваме наследяване само ако съществува връзка между два класа. Например,
- Колата е превозно средство
- Портокалът е плод
- Хирургът е лекар
- Кучето е животно
Тук Car може да наследява от Vehicle , Orange може да наследява от Fruit и т.н.
Замяна на метода в наследяването на Java
В пример 1 виждаме, че обектът на подкласа може да има достъп до метода на суперкласа.
Ако обаче един и същ метод присъства както в суперкласа, така и в подкласа, какво ще се случи?
В този случай методът в подкласа заменя метода в суперкласа. Тази концепция е известна като замяна на метода в Java.
Пример 2: Замяна на метода в Java наследяване
class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )
Изход
Ям кучешка храна, която мога да лая
В горния пример eat()
методът присъства както в суперкласа Animal, така и в подкласа Dog.
Тук създадохме обект лабрадор на Куче.
Сега, когато се обаждаме eat()
с помощта на обекта labrador, се извиква методът вътре в Dog. Това е така, защото методът в производния клас замества метода в основния клас.
Това се нарича замяна на метода. За да научите повече, посетете Замяна на метода на Java.
Забележка : Използвахме @Override
анотацията, за да кажем на компилатора, че заместваме метод. Пояснението обаче не е задължително. За да научите повече, посетете Java Annotations.
супер ключова дума в наследяването на Java
Преди видяхме, че един и същ метод в подкласа заменя метода в суперкласа.
В такава ситуация super
ключовата дума се използва за извикване на метода на родителския клас от метода на дъщерния клас.
Пример 3: супер ключова дума при наследяване
class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( // call method of superclass super.eat(); System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )
Изход
Мога да ям ям кучешка храна мога да лая
В горния пример eat()
методът присъства както в базовия клас Animal, така и в производния клас Dog. Забележете изявлението,
super.eat();
Тук super
ключовата дума се използва за извикване на eat()
метода, присъстващ в суперкласа.
Също така можем да използваме super
ключовата дума, за да извикаме конструктора на суперкласа от конструктора на подкласа. За да научите повече, посетете Java супер ключова дума .
защитени членове в наследството
В Java, ако клас включва protected
полета и методи, тогава тези полета и методи са достъпни от подкласа на класа.
Example 4: protected Members in Inheritance
class Animal ( protected String name; protected void display() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void getInfo() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access protected field and method // using the object of subclass labrador.name = "Rocky"; labrador.display(); labrador.getInfo(); ) )
Output
I am an animal. My name is Rocky
In the above example, we have created a class named Animal. The class includes a protected field: name and a method: display()
.
We have inherited the Dog class inherits Animal. Notice the statement,
labrador.name = "Rocky"; labrador.display();
Here, we are able to access the protected field and method of the superclass using the labrador object of the subclass.
Why use inheritance?
- The most important use of inheritance in Java is code reusability. The code that is present in the parent class can be directly used by the child class.
- Method overriding is also known as runtime polymorphism. Hence, we can achieve Polymorphism in Java with the help of inheritance.
Types of inheritance
There are five types of inheritance.
1. Single Inheritance
При единично наследяване един подклас се простира от един суперклас. Например,

2. Наследяване на много нива
При многостепенното наследяване подкласът се простира от суперклас и след това същият подклас действа като суперклас за друг клас. Например,

3. Йерархично наследяване
В йерархичното наследяване множество подкласове се простират от един суперклас. Например,

4. Множествено наследяване
При множествено наследяване един подклас се простира от множество суперкласове. Например,

Забележка : Java не поддържа множествено наследяване. Въпреки това можем да постигнем множествено наследяване с помощта на интерфейси. За да научите повече, посетете Java реализира множество наследяване.
5. Хибридно наследяване
Хибридното наследяване е комбинация от два или повече вида наследяване. Например,

Тук сме комбинирали йерархично и множествено наследяване, за да образуваме хибридно наследство.