Принципи ООП: Наслідування
Наслідування
Розглянемо принцип ООП — Наслідування.
Наслідування — це механізм, який дозволяє створювати класи на основі іншого класу.
- Клас, який використовується як основа, називається батьківським або суперкласом;
- Клас, створений на основі батьківського класу, називається дочірнім, підкласом або нащадком.
Таким чином, дочірній клас може наслідувати характеристики та властивості іншого класу — батьківського класу (його методи та змінні).
Наслідування класу здійснюється за допомогою ключового слова extends. Синтаксис для дочірнього класу, який наслідує батьківський клас, виглядає так:
Child.java
123class Child extends Parent { // properties and methods }
Розглянемо приклад, як працює наслідування у коді. Маємо клас Bird з певними полями та методами, а також клас Parrot з власними полями та методами. Папуга — це птах, тому логічно, що папуга має наслідувати клас Bird:
Ось код із скріншоту, переписаний для кращої читабельності та зрозумілості:
Bird.java
Parrot.java
Main.java
12345678910111213141516171819package 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 :("); } } }
Розгляньмо, що відбувається на цих зображеннях:
- Створюється клас
Bird, який у нашому випадку є батьківським класом. Цей клас має власні поля та методи; - Створюється клас
Parrot, який використовує ключове словоextendsдля наслідування від батьківського класуBird. КласParrotє дочірнім класом і має власні поля та методи. Крім того, як дочірній клас,Parrotуспадковує всі поля та методи батьківського класуBird; - Створюється об'єкт класу
Parrotу методіmainі видно, що можна ініціалізувати поля як батьківського, так і дочірнього класів. Спочатку ініціалізуються поля батьківського класуBird, а потім — поля дочірнього класуParrot. Далі викликаються методи: спочатку методи батьківського класу, а потім метод дочірнього класу.
Таким чином, ми використали наслідування для успадкування класу Bird.
Навіщо це потрібно?
Коли у нас є багато різних підкласів Bird, не лише Parrot, наприклад, також Pigeon та Penguin. У такому випадку буде багато дубльованих полів, таких як boolean canFly. Перше, у чому допомагає наслідування — це уникнення дублювання фрагментів коду.
Крім того, це суттєво покращує читабельність. На практиці ви рідко зустрічаєте клас Bird та його підкласи напряму, але наслідування часто використовується, особливо з інтерфейсами.
Note
Про інтерфейси ви дізнаєтеся у наступному розділі цього курсу.
Правила наслідування
-
Наслідувати можна лише один клас. Java не підтримує множинне наслідування. Один клас може мати лише одного батька;
-
Усе наслідується, окрім
privateзмінних і методів.
Note
Не можна наслідувати від самого себе!
Раніше згадувалося, що підклас матиме доступ до всіх змінних і методів батьківського класу. Проте це не зовсім так.
Насправді всі методи та змінні, позначені модифікатором private, недоступні для підкласу.
- Перевизначення методу батьківського класу.
Уявімо, що ми наслідуємо клас, але деякі частини успадкованого коду нам не підходять. Припустимо, ми хочемо, щоб певний метод працював інакше, ніж у батьківському класі.
Щоб перевизначити метод із батьківського класу, потрібно написати @Override над ним:
Parrot.java
1234@Override public void eat() { System.out.println("The parrot is eating"); }
У наведеному вище коді ми перевизначили метод батьківського класу, і тепер, коли цей метод викликається з дочірнього класу, буде виконано перевизначений метод!
- Запобігання наслідуванню.
Якщо ви не бажаєте, щоб хтось наслідував ваш клас, використовуйте модифікатор final перед ним.
Наприклад:
Bird.java
Parrot.java
123public final class Bird { // fields and methods }
Таким чином, використовуючи ключове слово final, ми заборонили наслідування класу Bird.
Це лише основні правила та особливості наслідування. Це велика тема, яку ви будете часто використовувати. Протягом курсу ви ознайомитеся з іншими аспектами наслідування та будете застосовувати їх частіше.
1. Навіщо потрібне наслідування в Java?
2. Скільки класів можна наслідувати одночасно?
3. Як можна запобігти наслідуванню в Java?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 4.76
Принципи ООП: Наслідування
Свайпніть щоб показати меню
Наслідування
Розглянемо принцип ООП — Наслідування.
Наслідування — це механізм, який дозволяє створювати класи на основі іншого класу.
- Клас, який використовується як основа, називається батьківським або суперкласом;
- Клас, створений на основі батьківського класу, називається дочірнім, підкласом або нащадком.
Таким чином, дочірній клас може наслідувати характеристики та властивості іншого класу — батьківського класу (його методи та змінні).
Наслідування класу здійснюється за допомогою ключового слова extends. Синтаксис для дочірнього класу, який наслідує батьківський клас, виглядає так:
Child.java
123class Child extends Parent { // properties and methods }
Розглянемо приклад, як працює наслідування у коді. Маємо клас Bird з певними полями та методами, а також клас Parrot з власними полями та методами. Папуга — це птах, тому логічно, що папуга має наслідувати клас Bird:
Ось код із скріншоту, переписаний для кращої читабельності та зрозумілості:
Bird.java
Parrot.java
Main.java
12345678910111213141516171819package 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 :("); } } }
Розгляньмо, що відбувається на цих зображеннях:
- Створюється клас
Bird, який у нашому випадку є батьківським класом. Цей клас має власні поля та методи; - Створюється клас
Parrot, який використовує ключове словоextendsдля наслідування від батьківського класуBird. КласParrotє дочірнім класом і має власні поля та методи. Крім того, як дочірній клас,Parrotуспадковує всі поля та методи батьківського класуBird; - Створюється об'єкт класу
Parrotу методіmainі видно, що можна ініціалізувати поля як батьківського, так і дочірнього класів. Спочатку ініціалізуються поля батьківського класуBird, а потім — поля дочірнього класуParrot. Далі викликаються методи: спочатку методи батьківського класу, а потім метод дочірнього класу.
Таким чином, ми використали наслідування для успадкування класу Bird.
Навіщо це потрібно?
Коли у нас є багато різних підкласів Bird, не лише Parrot, наприклад, також Pigeon та Penguin. У такому випадку буде багато дубльованих полів, таких як boolean canFly. Перше, у чому допомагає наслідування — це уникнення дублювання фрагментів коду.
Крім того, це суттєво покращує читабельність. На практиці ви рідко зустрічаєте клас Bird та його підкласи напряму, але наслідування часто використовується, особливо з інтерфейсами.
Note
Про інтерфейси ви дізнаєтеся у наступному розділі цього курсу.
Правила наслідування
-
Наслідувати можна лише один клас. Java не підтримує множинне наслідування. Один клас може мати лише одного батька;
-
Усе наслідується, окрім
privateзмінних і методів.
Note
Не можна наслідувати від самого себе!
Раніше згадувалося, що підклас матиме доступ до всіх змінних і методів батьківського класу. Проте це не зовсім так.
Насправді всі методи та змінні, позначені модифікатором private, недоступні для підкласу.
- Перевизначення методу батьківського класу.
Уявімо, що ми наслідуємо клас, але деякі частини успадкованого коду нам не підходять. Припустимо, ми хочемо, щоб певний метод працював інакше, ніж у батьківському класі.
Щоб перевизначити метод із батьківського класу, потрібно написати @Override над ним:
Parrot.java
1234@Override public void eat() { System.out.println("The parrot is eating"); }
У наведеному вище коді ми перевизначили метод батьківського класу, і тепер, коли цей метод викликається з дочірнього класу, буде виконано перевизначений метод!
- Запобігання наслідуванню.
Якщо ви не бажаєте, щоб хтось наслідував ваш клас, використовуйте модифікатор final перед ним.
Наприклад:
Bird.java
Parrot.java
123public final class Bird { // fields and methods }
Таким чином, використовуючи ключове слово final, ми заборонили наслідування класу Bird.
Це лише основні правила та особливості наслідування. Це велика тема, яку ви будете часто використовувати. Протягом курсу ви ознайомитеся з іншими аспектами наслідування та будете застосовувати їх частіше.
1. Навіщо потрібне наслідування в Java?
2. Скільки класів можна наслідувати одночасно?
3. Як можна запобігти наслідуванню в Java?
Дякуємо за ваш відгук!