В этом руководстве мы узнаем о наследовании 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();
Здесь лабрадор - объект Собаки. Однако name и 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 Method Overriding.
Примечание . Мы использовали @Override
аннотацию, чтобы сообщить компилятору, что мы переопределяем метод. Однако аннотация не является обязательной. Чтобы узнать больше, посетите Java Annotations.
супер ключевое слово в наследовании Java
Ранее мы видели, что тот же метод в подклассе переопределяет метод в суперклассе.
In such a situation, the super
keyword is used to call the method of the parent class from the method of the child class.
Example 3: super Keyword in Inheritance
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(); ) )
Output
I can eat I eat dog food I can bark
In the above example, the eat()
method is present in both the base class Animal and the derived class Dog. Notice the statement,
super.eat();
Here, the super
keyword is used to call the eat()
method present in the superclass.
We can also use the super
keyword to call the constructor of the superclass from the constructor of the subclass. To learn more, visit Java super keyword.
protected Members in Inheritance
In Java, if a class includes protected
fields and methods, then these fields and methods are accessible from the subclass of the class.
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. Гибридное наследование
Гибридное наследование - это комбинация двух или более типов наследования. Например,

Здесь мы объединили иерархическое и множественное наследование, чтобы сформировать гибридное наследование.