Java, спадкування є важливою опорою ООП (об’єктно-орієнтованого програмування). Це механізм у Java, за допомогою якого одному класу дозволяється успадковувати функції (поля та методи) іншого класу. У Java спадкування означає створення нових класів на основі існуючих. Клас, який успадковує від іншого класу, може повторно використовувати методи та поля цього класу. Крім того, ви також можете додати нові поля та методи до свого поточного класу.
Навіщо нам успадкування Java?
- Повторне використання коду: Код, написаний у суперкласі, є загальним для всіх підкласів. Дочірні класи можуть безпосередньо використовувати код батьківського класу.
- Перевизначення методу: Перевизначення методу можна досягти лише шляхом успадкування. Це один із способів, за допомогою яких Java досягає поліморфізму часу виконання.
- Абстракція: Концепція анотації, коли ми не повинні надавати всі деталі, досягається через успадкування. Абстракція лише показує функціональність користувачеві.
Важливі термінології, що використовуються в успадкуванні Java
- Клас: Клас — це набір об’єктів, які мають спільні характеристики/поведінку та спільні властивості/атрибути. Клас не є сутністю реального світу. Це лише шаблон, або проект, або прототип, з якого створюються об’єкти.
- Супер клас/батьківський клас: Клас, функції якого успадковуються, відомий як суперклас (або базовий клас, або батьківський клас).
- Підклас/Дочірній клас: Клас, який успадковує інший клас, відомий як підклас (або похідний клас, розширений клас або дочірній клас). Підклас може додавати власні поля та методи на додаток до полів і методів суперкласу.
- Повторне використання: Спадкування підтримує концепцію багаторазового використання, тобто коли ми хочемо створити новий клас і вже є клас, який містить частину потрібного коду, ми можемо вивести наш новий клас із існуючого класу. Роблячи це, ми повторно використовуємо поля та методи існуючого класу.
Як використовувати успадкування в Java?
The розширює ключове слово використовується для успадкування в Java. Використання ключового слова extends означає, що ви є похідним від існуючого класу. Іншими словами, розширення означає розширену функціональність.
Синтаксис:
class DerivedClass extends BaseClass { //methods and fields }>Приклад успадкування в Java
приклад: У наведеному нижче прикладі успадкування клас Bicycle є базовим класом, клас MountainBike є похідним класом, який розширює клас Bicycle, а клас Test є класом водія для запуску програми.
Java // Java program to illustrate the // concept of inheritance // base class class Bicycle { // the Bicycle class has two fields public int gear; public int speed; // the Bicycle class has one constructor public Bicycle(int gear, int speed) { this.gear = gear; this.speed = speed; } // the Bicycle class has three methods public void applyBrake(int decrement) { speed -= decrement; } public void speedUp(int increment) { speed += increment; } // toString() method to print info of Bicycle public String toString() { return ('No of gears are ' + gear + '
' + 'speed of bicycle is ' + speed); } } // derived class class MountainBike extends Bicycle { // the MountainBike subclass adds one more field public int seatHeight; // the MountainBike subclass has one constructor public MountainBike(int gear, int speed, int startHeight) { // invoking base-class(Bicycle) constructor super(gear, speed); seatHeight = startHeight; } // the MountainBike subclass adds one more method public void setHeight(int newValue) { seatHeight = newValue; } // overriding toString() method // of Bicycle to print more info @Override public String toString() { return (super.toString() + '
seat height is ' + seatHeight); } } // driver class public class Test { public static void main(String args[]) { MountainBike mb = new MountainBike(3, 100, 25); System.out.println(mb.toString()); } }> Вихід
No of gears are 3 speed of bicycle is 100 seat height is 25>
У наведеній вище програмі, коли створюється об’єкт класу MountainBike, копія всіх методів і полів суперкласу отримує пам’ять у цьому об’єкті. Ось чому, використовуючи об’єкт підкласу, ми також можемо отримати доступ до членів суперкласу.
Зверніть увагу, що під час успадкування створюється лише об’єкт підкласу, а не суперкласу. Для отримання додаткової інформації зверніться до Створення об’єкта Java успадкованого класу .
приклад 2: У наведеному нижче прикладі успадкування клас Employee є базовим класом, клас Engineer є похідним класом, який розширює клас Employee, а клас Test є класом драйвера для запуску програми.
Java // Java Program to illustrate Inheritance (concise) import java.io.*; // Base or Super Class class Employee { int salary = 60000; } // Inherited or Sub Class class Engineer extends Employee { int benefits = 10000; } // Driver Class class Gfg { public static void main(String args[]) { Engineer E1 = new Engineer(); System.out.println('Salary : ' + E1.salary + '
Benefits : ' + E1.benefits); } }> Вихід
Salary : 60000 Benefits : 10000>
Ілюстративне зображення програми:
перетворити рядок на int

На практиці спадкування, і поліморфізм використовуються разом у Java для досягнення швидкої продуктивності та читабельності коду.
Типи успадкування Java
Нижче наведено різні типи успадкування, які підтримуються Java.
- Єдине успадкування
- Багаторівневе успадкування
- Ієрархічне успадкування
- Множинне успадкування
- Гібридне успадкування
1. Єдине успадкування
При одинарному успадкуванні підклас походить лише від одного суперкласу. Він успадковує властивості та поведінку однобатьківського класу. Іноді його також називають простим успадкуванням. На малюнку нижче «A» — батьківський клас, а «B» — дочірній. Клас «B» успадковує всі властивості класу «A».

Єдине успадкування
Java // Java program to illustrate the // concept of single inheritance import java.io.*; import java.lang.*; import java.util.*; // Parent class class One { public void print_geek() { System.out.println('Geeks'); } } class Two extends One { public void print_for() { System.out.println('for'); } } // Driver class public class Main { // Main function public static void main(String[] args) { Two g = new Two(); g.print_geek(); g.print_for(); g.print_geek(); } }> Вихід
Geeks for Geeks>
2. Багаторівневе успадкування
У багаторівневому успадкуванні похідний клас буде успадковувати базовий клас, і, як і похідний клас, також діє як базовий клас для інших класів. На зображенні нижче клас A служить базовим класом для похідного класу B, який, у свою чергу, служить базовим класом для похідного класу C. У Java клас не може отримати прямий доступ до учасники дідуся та бабусі .

Багаторівневе успадкування
лексикографічноJava
// Importing required libraries import java.io.*; import java.lang.*; import java.util.*; // Parent class One class One { // Method to print 'Geeks' public void print_geek() { System.out.println('Geeks'); } } // Child class Two inherits from class One class Two extends One { // Method to print 'for' public void print_for() { System.out.println('for'); } } // Child class Three inherits from class Two class Three extends Two { // Method to print 'Geeks' public void print_lastgeek() { System.out.println('Geeks'); } } // Driver class public class Main { public static void main(String[] args) { // Creating an object of class Three Three g = new Three(); // Calling method from class One g.print_geek(); // Calling method from class Two g.print_for(); // Calling method from class Three g.print_lastgeek(); } }> Вихід
Geeks for Geeks>
3. Ієрархічне успадкування
В ієрархічному успадкуванні один клас служить суперкласом (базовим класом) для більш ніж одного підкласу. На зображенні нижче клас A служить базовим класом для похідних класів B, C і D.

// Java program to illustrate the // concept of Hierarchical inheritance class A { public void print_A() { System.out.println('Class A'); } } class B extends A { public void print_B() { System.out.println('Class B'); } } class C extends A { public void print_C() { System.out.println('Class C'); } } class D extends A { public void print_D() { System.out.println('Class D'); } } // Driver Class public class Test { public static void main(String[] args) { B obj_B = new B(); obj_B.print_A(); obj_B.print_B(); C obj_C = new C(); obj_C.print_A(); obj_C.print_C(); D obj_D = new D(); obj_D.print_A(); obj_D.print_D(); } }> Вихід
Class A Class B Class A Class C Class A Class D>
4. Множинне успадкування ( Через інтерфейси)
в Множинне успадкування , один клас може мати більше ніж один суперклас і успадковувати функції від усіх батьківських класів. Зверніть увагу, що Java робить ні підтримка множинне успадкування з класами. У Java ми можемо досягти множинного успадкування лише через Інтерфейси . На зображенні нижче клас C походить від інтерфейсів A і B.

Множинне успадкування
Java // Java program to illustrate the // concept of Multiple inheritance import java.io.*; import java.lang.*; import java.util.*; interface One { public void print_geek(); } interface Two { public void print_for(); } interface Three extends One, Two { public void print_geek(); } class Child implements Three { @Override public void print_geek() { System.out.println('Geeks'); } public void print_for() { System.out.println('for'); } } // Drived class public class Main { public static void main(String[] args) { Child c = new Child(); c.print_geek(); c.print_for(); c.print_geek(); } }> Вихід
Geeks for Geeks>
5. Гібридне успадкування
Це суміш двох або більше з перерахованих вище типів успадкування. Оскільки Java не підтримує множинне успадкування з класами, гібридне успадкування з множинним успадкуванням також неможливе з класами. У Java ми можемо досягти гібридного успадкування лише через Інтерфейси якщо ми хочемо залучити множинне успадкування для реалізації гібридного успадкування.
Однак важливо зазначити, що гібридне успадкування не обов’язково потребує виключного використання множинного успадкування. Це можна досягти за допомогою комбінації багаторівневого успадкування та ієрархічного успадкування з класами, ієрархічного та єдиного успадкування з класами. Таким чином, справді можливо реалізувати гібридне успадкування, використовуючи лише класи, не покладаючись на множинний тип успадкування.

Гібридне успадкування
Java IS-A type of Relationship
IS-A – це спосіб сказати: цей об’єкт є типом цього об’єкта. Давайте подивимося, як ключове слово extends використовується для досягнення успадкування.
міститься в рядкуJava
public class SolarSystem { } public class Earth extends SolarSystem { } public class Mars extends SolarSystem { } public class Moon extends Earth { }> Тепер, виходячи з наведеного вище прикладу, в об’єктно-орієнтованих термінах вірно наступне:-
- SolarSystem є суперкласом класу Earth.
- SolarSystem є суперкласом класу Mars.
- Земля і Марс є підкласами класу SolarSystem.
- Місяць є підкласом як Землі, так і класу Сонячна система.
class SolarSystem { } class Earth extends SolarSystem { } class Mars extends SolarSystem { } public class Moon extends Earth { public static void main(String args[]) { SolarSystem s = new SolarSystem(); Earth e = new Earth(); Mars m = new Mars(); System.out.println(s instanceof SolarSystem); System.out.println(e instanceof Earth); System.out.println(m instanceof SolarSystem); } }> Вихід
true true true>
Що можна зробити в підкласі?
У підкласах ми можемо успадкувати членів як є, замінити їх, приховати або доповнити новими членами:
- Успадковані поля можна використовувати безпосередньо, як і будь-які інші поля.
- Ми можемо оголошувати нові поля в підкласі, яких немає в суперкласі.
- Успадковані методи можна використовувати безпосередньо як вони є.
- Ми можемо написати новий екземпляр таким чином, метод у підкласі має ту саму сигнатуру, що й у суперкласі переважний це (як у прикладі вище, toString() метод перевизначено).
- Ми можемо написати новий статичний таким чином, метод у підкласі має ту саму сигнатуру, що й у суперкласі ховаючись це.
- Ми можемо оголошувати нові методи в підкласі, яких немає в суперкласі.
- Ми можемо написати конструктор підкласу, який викликає конструктор суперкласу, неявно або за допомогою ключового слова супер .
Переваги успадкування в Java:
- Повторне використання коду: успадкування дозволяє повторно використовувати код і зменшує кількість коду, який потрібно написати. Підклас може повторно використовувати властивості та методи суперкласу, зменшуючи дублювання коду.
- Абстракція: успадкування дозволяє створювати абстрактні класи, які визначають загальний інтерфейс для групи пов’язаних класів. Це сприяє абстракції та інкапсуляції, полегшуючи підтримку та розширення коду.
- Ієрархія класів: успадкування дозволяє створити ієрархію класів, яку можна використовувати для моделювання об’єктів реального світу та їхніх зв’язків.
- Поліморфізм: успадкування допускає поліморфізм, який є здатністю об’єкта приймати різні форми. Підкласи можуть перевизначати методи суперкласу, що дозволяє їм змінювати свою поведінку різними способами.
Недоліки успадкування в Java:
- Складність: успадкування може зробити код складнішим і важчим для розуміння. Це особливо вірно, якщо ієрархія успадкування глибока або якщо використовується множинне успадкування.
- Тісний зв’язок: успадкування створює тісний зв’язок між суперкласом і підкласом, що ускладнює внесення змін до суперкласу без впливу на підклас.
Висновок
Давайте перевіримо деякі важливі моменти зі статті, зазначені нижче:
- Суперклас за замовчуванням : Крім Об'єкт клас, який не має суперкласу, кожен клас має один і тільки один прямий суперклас (єдине успадкування). За відсутності будь-якого іншого явного суперкласу кожен клас неявно є підкласом класу Object.
- Суперклас може бути лише один: Суперклас може мати будь-яку кількість підкласів. Але підклас може мати лише один суперклас. Це тому, що Java не підтримує множинне успадкування з класами. Хоча з інтерфейсами Java підтримує множинне успадкування.
- Конструктори успадкування: Підклас успадковує всі члени (поля, методи та вкладені класи) від свого суперкласу. Конструктори не є членами, тому вони не успадковуються підкласами, але конструктор суперкласу можна викликати з підкласу.
- Приватне успадкування члена: Підклас не успадковує приватних членів свого батьківського класу. Однак, якщо суперклас має загальнодоступні або захищені методи (наприклад, геттери та сетери) для доступу до його приватних полів, вони також можуть використовуватися підкласом.
Поширені запитання щодо спадкування
1. Що таке успадкування Java?
Спадкування — це концепція ООП, де один клас успадковує інший клас, який може повторно використовувати методи та поля батьківського класу.
2. Які є 4 типи успадкування в Java?
Бувають одинарні, багаторівневі, ієрархічні та гібридні
3. Яке використання ключового слова extend?
Ключове слово extend використовується для успадкування одного класу іншим.
4. Що є прикладом успадкування в Java?
Нижче наведено реальний приклад успадкування в Java:
Розглянемо групу транспортних засобів. Вам потрібно створити класи для автобусів, автомобілів і вантажівок. Методи FuelAmount(), Capacity(), applyBrakes() будуть однаковими для всіх трьох класів.
Використана література:
- Head First Java Кеті Сієрра та Берт Бейтс
- Java: Посібник для початківців Герберта Шильдта
- Java: Повний довідник Герберта Шільдта
- Ефективна Java Джошуа Блоха
- Java: The Good Parts, Джим Волдо.