Спадщина в Java (з прикладом)

⚡ Розумний підсумок

Спадщина в Java — це механізм, за допомогою якого один клас отримує поля та методи іншого класу за допомогою ключового слова extends. Він сприяє повторному використанню коду та моделює зв'язок Is-A між суперкласом та його підкласами.

  • 🧬 Визначення спадкування: Один клас отримує поля та методи іншого за допомогою extends.
  • 👨‍👩‍👧 Зв'язок "є-А": Моделює ієрархію батьківського (супер) класу та дочірнього (під) класу.
  • 🗂️ П'ять типів: Однорівневе, множинне, багаторівневе, ієрархічне та гібридне успадкування.
  • 🚫 Java Обмеження: Java не підтримує множинне або гібридне успадкування через класи.
  • 🔑 Супер ключове слово: Отримує доступ до змінних, методів та конструкторів батьківського класу з підкласу.
  • Перевага: Повторно використовує перевірений код та додає функції через нові класи без зміни існуючих.

Спадщина в Java

Що таке успадкування?

Спадкування це механізм, за якого один клас набуває властивості іншого класу. Наприклад, дитина успадковує риси своїх батьків. З успадкуванням ми можемо повторно використовувати поля та методи існуючого класу. Таким чином, успадкування сприяє багаторазовому використанню та є важливою концепцією ООП.

У чому полягає спадковість Java?

Java Спадкування це механізм, за якого один клас набуває властивості іншого класу. в Java, коли між двома класами існує зв’язок «Є-А», ми використовуємо успадкування. Батьківський клас називається суперкласом, а успадкований клас називається підкласом. Ключове слово extends використовується підкласом для успадкування особливостей суперкласу. Успадкування важливе, оскільки воно веде до повторного використання коду.

Java Синтаксис успадкування:

class subClass extends superClass
{
   //methods and fields
}

Види спадкування в Java

Ось різні типи успадкування в Java:

  1. Одиночне успадкування
  2. Множинне успадкування
  3. Багаторівневе успадкування
  4. Ієрархічне успадкування
  5. Гібридне успадкування

1. Одинарне успадкування:

У Single Inheritance один клас розширює інший клас (лише один клас).

Єдина спадщина в Java
Одиночне успадкування

На схемі вище клас B розширює лише клас A. Клас A є суперкласом, а клас B є підкласом.

2. Множинне успадкування:

Множинне успадкування — одне з успадкування в Java типи, де один клас розширює більше ніж один клас. Java не підтримує множинне успадкування.

Множинне успадкування в Java

Java Множинне успадкування

Відповідно до діаграми вище, клас C розширює класи A і B.

3. Багаторівневе успадкування:

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

Багаторівневе успадкування в Java

Багаторівневе успадкування

Як показано на схемі, клас C є підкласом B, а B є підкласом класу A.

4. Ієрархічне успадкування:

В ієрархічному успадкуванні один клас успадковується багатьма підкласами.


Ієрархічне успадкування в Java

Ієрархічне успадкування

Відповідно до прикладу вище, класи B, C і D успадковують той самий клас A.

5. Гібридне успадкування:

Гібридне успадкування — один із типів успадкування в Java який є комбінацією одинарного та множинного успадкування.


Гібридне успадкування

Гібридне успадкування

Відповідно до прикладу вище, усі публічні та захищені члени класу A успадковуються в клас D, спочатку через клас B, а потім через клас C.

Примітка: Java не підтримує гібридне/множинне успадкування

Спадщина в Java Приклад

Ось приклад успадкування в Java:


Приклад Java Спадкування

Java Приклад успадкування

class Doctor {
 void Doctor_Details() {
  System.out.println("Doctor Details...");
 }
}

class Surgeon extends Doctor {
 void Surgeon_Details() {
  System.out.println("Surgen Detail...");
 }
}

public class Hospital {
 public static void main(String args[]) {
  Surgeon s = new Surgeon();
  s.Doctor_Details();
  s.Surgeon_Details();
 }
}

Супер ключове слово

Ключове слово super схоже на ключове слово «це». Ключове слово super можна використовувати для доступу до будь-якого елемента даних або методів батьківського класу. Ключове слово super можна використовувати в змінна, метод і рівень конструктора.

Синтаксис:

super.<method-name>();

Також перевірте: - це ключове слово в Java: Що таке і як використовувати з прикладом

Вивчіть успадкування в ООП на прикладі

Розглянемо те ж саме банківське додаток від попередній приклад.

Ми маємо відкрити два різні типи рахунків: один для збереження, а інший для перевірки (також відомий як поточний).

Спадкування в ООП

Давайте порівняємо та вивчимо, як ми можемо підійти до кодування з a перспектива структурованого та об'єктно-орієнтованого програмування.

Структурний підхід: У структурному програмуванні ми створимо дві функції –

  1. Один для зняття
  2. А інший для депозитних дій.

Оскільки робота цих функцій залишається однаковою для всіх облікових записів.

Спадкування в ООП

Підхід ООП: Під час використання ООП програмний підхід. Ми б створили два класи.

  • Кожна з них має функції депозиту та виведення.
  • Це призведе до зайвої додаткової роботи.

Спадкування в ООП

Запит на зміну програмного забезпечення

Тепер є зміни в специфікації вимог до чогось, що є настільки поширеним у індустрії програмного забезпечення. Ви повинні додати функціональність привілейованого банківського рахунку з овердрафтом. Для довідки, овердрафт – це можливість зняти суму, яка перевищує наявний баланс на вашому рахунку.

Запит на зміну програмного забезпечення

Структурний підхід: Використовуючи функціональний підхід, я маю змінити свою функцію вилучення, яка вже перевірена та базова. І додайте метод, як показано нижче, щоб подбати про нові вимоги.

Запит на зміну програмного забезпечення

Підхід ООП: Використовуючи підхід ООП, вам просто потрібно написати новий клас з унікальною реалізацією функції відкликання. Ми ніколи не торкалися перевіреного фрагмента коду.

Запит на зміну програмного забезпечення

Ще один запит на зміну

Що робити, якщо вимога зміниться? Подобається додати рахунок кредитної картки з власними унікальними вимогами щодо депозитів.

Вимога щодо кількох запитів на зміну програмного забезпечення

Структурний підхід: Використовуючи структурний підхід, ви повинні знову змінити перевірений фрагмент коду депозиту.

Структурний підхід до багаторазового запиту на зміну програмного забезпечення

Підхід ООП: Але використовуючи об'єктно-орієнтований підхід, ви просто створите новий клас з його унікальною реалізацією методу депозиту (виділено червоним кольором на зображенні нижче). Тож, хоча структурне програмування спочатку здається простим підходом, ООП виграє в довгостроковій перспективі.

Підхід ООП до запиту на кілька змін

Переваги успадкування в ООП

Але можна заперечити, що в усіх класах ви маєте повторювані частини коду.

Щоб подолати це, ви створюєте батьківський клас, скажімо «рахунок» і реалізуєте ту саму функцію депозиту та зняття. І зробіть дочірні класи успадкованими класами «облікового запису». Щоб вони мали доступ до функцій зняття та депозиту в класі рахунків. Функції не потрібно реалізовувати окремо. Це є Спадкування в java. .

Переваги успадкування в ООП

Переваги успадкування в ООП

Поширені запитання

Java уникає множинного успадкування класів, щоб запобігти «проблемі діамантів», коли компілятор не може вирішити, який успадкований метод використовувати. Натомість, Java дозволяє класу реалізувати кілька інтерфейсів для безпечного досягнення подібної гнучкості.

Ключове слово this посилається на поточний об'єкт та його члени, тоді як super посилається на безпосередній батьківський клас. Використовуйте super для виклику змінних, методів або конструктора батьківського класу з підкласу.

Успадкування моделює зв'язок «Є-А», де підклас розширює батьківський. Композиція моделює зв'язок «Має-А», де клас містить інші об'єкти. Композиція часто є більш гнучкою та є кращою для слабозв'язаних конструкцій.

Штучний інтелект може аналізувати обов'язки класів, пропонувати спільні базові класи, рекомендувати інтерфейси замість глибокого успадкування та позначати дублікований код, helpping Розробники створюють чисті, повторно використовувані ієрархії, що дотримуються принципів об'єктно-орієнтованого проектування.

Так. Статичний аналіз за допомогою штучного інтелекту може вимірювати глибину успадкування, позначати крихкі або надмірно вкладені ієрархії та пропонувати рефакторинг у бік композиції або інтерфейсів для покращення підтримки та зменшення тісного зв'язку.

Підсумуйте цей пост за допомогою: