Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java_L1.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
37.55 Кб
Скачать

1.3.3. Успадкування

Успадкування (inheritance) – це відношення між класами, при якому клас використовує структуру або поведінку іншого (одиночне успадкування) або інших (множинне успадкування) класів. Успадкування вводить ієрархію “загальне/часткове”, в якій підклас успадковує від одного або кількох більш загальних суперкласі. Підкласи зазвичай доповнюють або перевизначають успадковану структуру и поведінку. Як приклад розглянемо задачу, в якій необхідно реалізувати класи “Легковий автомобіль” і “Вантажний автомобіль”. Очевидно, ці два класи мають багато спільної функціональності. Так, вони обидва мають 4 колеса, двигун, можуть пересуватися и т.д. Усі ці властивості має будь-який автомобіль (не спеціальний, багатоколісний), не залежно від того вантажний він або легковий 5- або 12-місний. Розумно винести ці спільні властивості і функціональність в окремий клас, наприклад, “Автомобіль”, і успадкувати від нього класи “Легковий автомобіль” і “Вантажний автомобіль”, щоб уникнути повторного написання одного і того ж коду в різних класах.

Відношення узагальнення позначається однією суцільною лінією з трикутною стрілкою на одному з кінців. Стрілка вказує на більш загальний клас (клас-предок або суперклас), а її відсутність – на більш спеціальний клас (клас-спадкоємець або підклас).

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

В розглянутому прикладі застосовано одиночне успадкування. Деяккий клас також може успадкувати властивості і поведінку зразу кількох класів. Найпопулярнішим прикладом застосування множинного успадкування є проектування системи обліку товарів у зоомагазині.

Всі тварини в зоомагазині є спадкоємцями класу “Тварина”, а також спадкоємцями класу” Товар”.Тобто всі вони мають вік, потребують їжі и води, и разом з тим мають ціну и можуть бути продані. Множинне успадкування на діаграмі зображується точно так же як і одиночне успадкування за винятком того, що лінії успадкування з’єднують клас-спадкоємець зразу з кількома суперкласами.

Не всі об’єкто-зорієнтовані мови програмування мають мовні конструкції для опису множинного успадкування.

Багато з них не підтримують множинне успадкування і не мають синтаксичних конструкцій для його реалізації.

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

1.3.4. Метакласи

Будь-який об’єкт має структуру, яка складається з полів і методів. Об’єкти, які мають однакову структуру і семантику, описуються одним класом, який за суттю є визначенням структури об’єктів, які породжені від нього.

Кожний клас завжди має строгий шаблон, який задається мовою програмування або вибраною об’єктною моделлю. Шаблон визначає припустиме чи ні множинне успадкування, які обмеження на іменування класів, як описуються поля и методи, набір існуючих типів даних й багато іншого. Отже клас можна розглядати як об’єкт, який має властивості (ім’я, список полів і їх типи, список методів, список аргументів для кожного методу і так далі). Також клас може мати поведінку, тобто підтримувати методи. Оскільки будь-який об’єкт має шаблон, який описує властивості та поведінку цього об’єкта, то його можна визначити й для класу. Такий шаблон, який задає різні класи, називається метаклас.

У мові Java також є таке поняття. Це клас, який називається – Class (описує класи) і розміщується в основній бібліотеці java.lang. Віртуальна машина використовує його за прямим призначенням. Коли завантажується черговий .class-файл, який містить опис нового класу, JVM породжує об’єкт класу Class, який буде зберігати його структуру. Отже, Java використовує концепцію метакласу з практичною метою. За допомогою Class реалізована підтримка статичних (static) полів і методів. Насамкінець, цей клас має ряд методів, корисних для розробників. Це ми розглянемо пізніше.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]