#14 – Спадкування в класах
Відеоурок
Спадкування є одним із ключових понять ООП. За рахунок спадкування можна створити один загальний клас (клас батьків) і створити безліч інших класів (класи спадкоємці), що успадкують усі поля, методи та конструктори з головного класу.
Навіщо використовувати успадкування?
Припустимо, що у нас є один великий клас «Транспорт». У класі описуються базові характеристики для всіх транспортних засобів:
- поля: швидкість, вага, запас ходу тощо;
- методи: отримання інформації з полів, встановлення нових значень;
- конструктор: порожній та встановлення всіх полів.
На основі класу ми можемо спокійно створити об'єкт легкової машини, об'єкт вантажівки, об'єкт літака і так далі. Усі об'єкти мають однакові характеристики та методи.
Ми явно розуміємо, що у об'єкта машина та літак будуть різні поля та характеристики. Як можна вчинити:
- Можна створити два окремих класи: «Car» та «Airplane». У кожному класі будуть усі методи, поля та конструктори повторно переписані з класу «Транспорт», а також нові методи, що важливі тільки для конкретного класу;
- Можна створити два класи спадкоємця: «Car» та «Airplane». Обидва класи будуть успадковувати все від класу «Транспорт» і будуть містити свої додаткові функції. Таким чином повторення коду не буде і код стане меншим і чистішим.
Створення класів спадкоємців
Для створення класу спадкоємця потрібно створити клас та вказати спадкування від головного класу.
Приклад класу спадкоємця:
// Звичайний клас
class Transport {
protected float speed;
}
// Також звичайний клас, але успадковує дані від класу Transport
class Auto extends Transport {
private String model;
Auto (float speed, String model) {
this.speed = speed;
this.model = model;
System.out.println("Швидкість: " + speed + ", модель - " + model);
}
}
public class Main {
public static void main(String[] args) {
// Можемо посилатися не тільки на дані з Auto,
// але також дані з класу Transport
Auto bmw = new Auto(250.5f, "X3M");
Auto mercedes = new Auto(270f, "C63 AMG");
}
}Як ви можете помітити, у нас є одна загальна змінна speed. Оскільки модифікатор доступу у неї protected, то доступ до змінної ми маємо всередині класу Transport, а також усередині всіх класів спадкоємців.
Для створення успадкування ми прописали ключове слово extends після імені класу і вказали, який клас буде батьківським.
Якщо потрібно з класу спадкоємця отримати дані з батьківського класу, то завжди можна звертатися до значення super.
Вихідний код
Весь код буде доступний після підписки на проект! Завдання до уроку
Необхідно оформити передплату на проект, щоб отримати доступ до всіх домашніх завдань
Велике завдання за курсом
Вам необхідно оформити передплату на сайті, щоб мати доступ до всіх великих завдань. У завдання входить методика рішення, а також готовий проект з відповіддю до завдання.
PS: подібні завдання доступні при підписці від 1 місяця
Також варто подивитися