Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Принципи ООП: Наслідування | ООП
Java ООП

bookПринципи ООП: Наслідування

Наслідування

Розглянемо принцип ООП — Наслідування.

Наслідування — це механізм, який дозволяє створювати класи на основі іншого класу.

  • Клас, який використовується як основа, називається батьківським або суперкласом;
  • Клас, створений на основі батьківського класу, називається дочірнім, підкласом або нащадком.

Таким чином, дочірній клас може успадковувати характеристики та властивості іншого класу — батьківського класу (його методи та змінні).

Наслідування класу здійснюється за допомогою ключового слова extends. Синтаксис для дочірнього класу, який наслідує батьківський клас, виглядає так:

Child.java

Child.java

copy
123
class Child extends Parent { // properties and methods }

Розглянемо приклад, як працює наслідування в коді. Маємо клас Bird з певними полями та методами, а також клас Parrot з власними полями та методами. Папуга є птахом, тому логічно, що папуга має наслідувати клас Bird:

Ось код із скріншоту, переписаний для кращої читабельності та зрозумілості:

Bird.java

Bird.java

Parrot.java

Parrot.java

Main.java

Main.java

copy
12345678910111213141516171819
package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }

Розгляньмо, що відбувається на цих зображеннях:

  1. Ми створюємо клас Bird, який у нашому випадку є батьківським класом. Цей клас має власні поля та методи;
  2. Ми створюємо клас Parrot, який використовує ключове слово extends для наслідування від батьківського класу Bird. Клас Parrot є дочірнім класом і має власні поля та методи. Крім того, як дочірній клас, Parrot наслідує всі поля та методи батьківського класу Bird;
  3. Ми створюємо об'єкт класу Parrot у методі main і бачимо, що можемо ініціалізувати поля як батьківського, так і дочірнього класів. Спочатку ініціалізуємо поля батьківського класу Bird, а потім — поля дочірнього класу Parrot. Далі викликаємо методи: спочатку методи батьківського класу, а потім метод дочірнього класу.

Таким чином, ми використали наслідування для успадкування класу Bird.

Навіщо це потрібно?

Коли у нас є багато різних підкласів Bird, не лише Parrot, наприклад, ще Pigeon та Penguin. У такому випадку буде багато дубльованих полів, наприклад, boolean canFly. Перше, чим допомагає наслідування — це уникнення дублювання коду. Крім того, це суттєво покращує читабельність. На практиці ви рідко зустрічаєте клас Bird і його підкласи напряму, але наслідування часто використовується, особливо з інтерфейсами.

Note

Про інтерфейси ви дізнаєтеся у наступному розділі цього курсу.

Правила наслідування

  • Наслідувати можна лише один клас. Java не підтримує множинне наслідування. Один клас може мати лише одного батька;

  • Наслідується все, крім змінних і методів з модифікатором private.

Note

Не можна наслідувати самого себе!

Раніше я згадував, що підклас матиме доступ до всіх змінних і методів батьківського класу. Проте це не зовсім так.

Насправді всі методи й змінні, позначені модифікатором private, недоступні для підкласу.

  • Перевизначення методу батьківського класу.

Уявімо, що ми наслідуємо клас, але деякі частини успадкованого коду нам не підходять. Припустимо, ми хочемо, щоб певний метод працював інакше, ніж у батьківському класі.

Щоб перевизначити метод із батьківського класу, потрібно написати @Override над ним:

Parrot.java

Parrot.java

copy
1234
@Override public void eat() { System.out.println("The parrot is eating"); }

У наведеному вище коді ми перевизначили метод батьківського класу, і тепер, коли цей метод викликається з дочірнього класу, буде виконано перевизначений метод!

  • Запобігання наслідуванню.

Якщо ви не бажаєте, щоб хтось наслідував ваш клас, використовуйте модифікатор final перед ним. Наприклад:

Bird.java

Bird.java

Parrot.java

Parrot.java

copy
123
public final class Bird { // fields and methods }

Таким чином, використовуючи ключове слово final, ми заборонили наслідування класу Bird.

Це лише основні правила та особливості наслідування. Це об'ємна тема, яку ви будете часто використовувати. Протягом курсу ви ознайомитеся з іншими аспектами наслідування та будете застосовувати їх частіше.

1. Навіщо потрібне наслідування в Java?

2. Скільки класів можна наслідувати одночасно?

3. Як можна запобігти наслідуванню в Java?

question mark

Навіщо потрібне наслідування в Java?

Select the correct answer

question mark

Скільки класів можна наслідувати одночасно?

Select the correct answer

question mark

Як можна запобігти наслідуванню в Java?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 4.76

bookПринципи ООП: Наслідування

Свайпніть щоб показати меню

Наслідування

Розглянемо принцип ООП — Наслідування.

Наслідування — це механізм, який дозволяє створювати класи на основі іншого класу.

  • Клас, який використовується як основа, називається батьківським або суперкласом;
  • Клас, створений на основі батьківського класу, називається дочірнім, підкласом або нащадком.

Таким чином, дочірній клас може успадковувати характеристики та властивості іншого класу — батьківського класу (його методи та змінні).

Наслідування класу здійснюється за допомогою ключового слова extends. Синтаксис для дочірнього класу, який наслідує батьківський клас, виглядає так:

Child.java

Child.java

copy
123
class Child extends Parent { // properties and methods }

Розглянемо приклад, як працює наслідування в коді. Маємо клас Bird з певними полями та методами, а також клас Parrot з власними полями та методами. Папуга є птахом, тому логічно, що папуга має наслідувати клас Bird:

Ось код із скріншоту, переписаний для кращої читабельності та зрозумілості:

Bird.java

Bird.java

Parrot.java

Parrot.java

Main.java

Main.java

copy
12345678910111213141516171819
package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }

Розгляньмо, що відбувається на цих зображеннях:

  1. Ми створюємо клас Bird, який у нашому випадку є батьківським класом. Цей клас має власні поля та методи;
  2. Ми створюємо клас Parrot, який використовує ключове слово extends для наслідування від батьківського класу Bird. Клас Parrot є дочірнім класом і має власні поля та методи. Крім того, як дочірній клас, Parrot наслідує всі поля та методи батьківського класу Bird;
  3. Ми створюємо об'єкт класу Parrot у методі main і бачимо, що можемо ініціалізувати поля як батьківського, так і дочірнього класів. Спочатку ініціалізуємо поля батьківського класу Bird, а потім — поля дочірнього класу Parrot. Далі викликаємо методи: спочатку методи батьківського класу, а потім метод дочірнього класу.

Таким чином, ми використали наслідування для успадкування класу Bird.

Навіщо це потрібно?

Коли у нас є багато різних підкласів Bird, не лише Parrot, наприклад, ще Pigeon та Penguin. У такому випадку буде багато дубльованих полів, наприклад, boolean canFly. Перше, чим допомагає наслідування — це уникнення дублювання коду. Крім того, це суттєво покращує читабельність. На практиці ви рідко зустрічаєте клас Bird і його підкласи напряму, але наслідування часто використовується, особливо з інтерфейсами.

Note

Про інтерфейси ви дізнаєтеся у наступному розділі цього курсу.

Правила наслідування

  • Наслідувати можна лише один клас. Java не підтримує множинне наслідування. Один клас може мати лише одного батька;

  • Наслідується все, крім змінних і методів з модифікатором private.

Note

Не можна наслідувати самого себе!

Раніше я згадував, що підклас матиме доступ до всіх змінних і методів батьківського класу. Проте це не зовсім так.

Насправді всі методи й змінні, позначені модифікатором private, недоступні для підкласу.

  • Перевизначення методу батьківського класу.

Уявімо, що ми наслідуємо клас, але деякі частини успадкованого коду нам не підходять. Припустимо, ми хочемо, щоб певний метод працював інакше, ніж у батьківському класі.

Щоб перевизначити метод із батьківського класу, потрібно написати @Override над ним:

Parrot.java

Parrot.java

copy
1234
@Override public void eat() { System.out.println("The parrot is eating"); }

У наведеному вище коді ми перевизначили метод батьківського класу, і тепер, коли цей метод викликається з дочірнього класу, буде виконано перевизначений метод!

  • Запобігання наслідуванню.

Якщо ви не бажаєте, щоб хтось наслідував ваш клас, використовуйте модифікатор final перед ним. Наприклад:

Bird.java

Bird.java

Parrot.java

Parrot.java

copy
123
public final class Bird { // fields and methods }

Таким чином, використовуючи ключове слово final, ми заборонили наслідування класу Bird.

Це лише основні правила та особливості наслідування. Це об'ємна тема, яку ви будете часто використовувати. Протягом курсу ви ознайомитеся з іншими аспектами наслідування та будете застосовувати їх частіше.

1. Навіщо потрібне наслідування в Java?

2. Скільки класів можна наслідувати одночасно?

3. Як можна запобігти наслідуванню в Java?

question mark

Навіщо потрібне наслідування в Java?

Select the correct answer

question mark

Скільки класів можна наслідувати одночасно?

Select the correct answer

question mark

Як можна запобігти наслідуванню в Java?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 2
some-alt