Page 82 - 6253
P. 82
myOb.call();
}
}
Запустивши програму на виконання отримаємо наступний результат:
Метод call() класу A
Метод call() класу B
Метод call() класу C
У представленому прикладі змінну myOb визначено як змінну класу А, який є
базовим класом для класів В та С. Як можна побачити, викликається версія методу
call(), визначена типом об’єкту, а не типом посилання myOb.
Перекриття методів дає змогу визначити в базовому класі спільні методи, а в
підкласах визначити специфічні шляхи їхньої реалізації. В цьому полягає ще один
прояв поліморфізму – один інтерфейс, декілька методів.
Завдяки комбінації наслідування і перекриття методів базовий клас визначає
загальний вигляд методів, які надалі використовують усі його підкласи.
4.3. Абстрактні класи
Визначаючи загальний клас, який пізніше має стати базовим класом для
інших підкласів, не можливо до кінця визначити усі деталі реалізації його методів. У
базовому класі вказується тільки призначення методу, а конкретна реалізація
задається безпосередньо у підкласах. Тобто, задача створення абстрактного класу
зводиться до створення базового класу з методами, які не мають конкретної
реалізації. Методи, які в базовому класі фактично виступають «заглушками»,
необхідно перекрити у відповідних підкласах. Для визначення таких методів
використовують ключове слово abstract.
abstract тип ім’я_Методу(список_параметрів);
Абстрактні методи не мають тіла (коду), їхня реалізація передається на
розгляд підкласу.
Якщо клас містить хоча б один абстрактний метод, його також необхідно
оголосити як абстрактний.
abstract class Ім’я_Класу {
81