1. Кити й корови
А чи відомий вам такий зоологічний факт, що корова значно ближча до кита, ніж, скажімо, до бегемота? Виявляється, корови й кити — близькі родичі.
Зараз ми розповімо вам про ще один дуже потужний інструмент ООП — поліморфізм. Він має чотири особливості.
2. Успадкування — не панацея
Уявіть, що ви для гри написали клас Корова
. Він має багато полів і методів. Об'єкти цього класу можуть робити різні речі: ходити, їсти, спати. А ще корови дзвонять у дзвіночок, коли ходять. Припустімо, ви реалізували в класі все до найменших дрібниць.
А тут з'являється замовник проєкту й каже, що хоче випустити новий рівень гри, в якому всі дії відбуватимуться в морі, а головним героєм буде кит.
Ви почали проєктувати клас Кит
і зрозуміли, що він дуже мало відрізняється від класу Корова
. Логіка роботи обох класів дуже схожа, і ви вирішили скористатися успадкуванням.
Клас Корова
ідеально підходить на роль батьківського класу: він має всі необхідні змінні й методи. Досить тільки додати киту вміння плавати. Але є проблема: ваш кит має ноги, роги та ще й дзвіночок. Адже цю функціональність реалізовано в класі Корова
. Що тут можна зробити?
3. Перевизначення методу
Нам на допомогу приходить перевизначення (заміна) методів. Якщо ми успадкували метод, який робить не зовсім те, що потрібно в нашому новому класі, ми можемо замінити цей метод на інший.
Як це робиться? У нашому класі-нащадку ми оголошуємо такий самий метод, що й метод батьківського класу, який нам потрібно змінити. Пишемо в ньому новий код. І все: ніби старого методу в батьківському класі й не було.
От як це працює:
Код | Опис |
---|---|
|
|
|
Цей код виводить на екран напис:
|
|
Цей код виводить на екран напис:
|
Після успадкування від класу Cow
й перевизначення методу printName
клас Whale
міститиме такі дані й методи:
|
Ні про який старий метод ми навіть і не знаємо. |
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ