Наследование Java (с примерами)

В этом руководстве мы узнаем о наследовании 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

это отношения

В 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

При одиночном наследовании отдельный подкласс расширяется от единственного суперкласса. Например,

Одиночное наследование Java

2. Многоуровневое наследование

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

Многоуровневое наследование Java

3. Иерархическое наследование

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

Иерархическое наследование Java

4. Множественное наследование

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

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

Примечание . Java не поддерживает множественное наследование. Однако мы можем добиться множественного наследования с помощью интерфейсов. Чтобы узнать больше, посетите Java реализует множественное наследование.

5. Гибридное наследование

Гибридное наследование - это комбинация двух или более типов наследования. Например,

Гибридное наследование Java

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

Интересные статьи...