JavaRush /Курси /Java Syntax Zero /Поліморфізм

Поліморфізм

Java Syntax Zero
Рівень 18 , Лекція 2
Відкрита

1. Кити й корови

А чи відомий вам такий зоологічний факт, що корова значно ближча до кита, ніж, скажімо, до бегемота? Виявляється, корови й кити — близькі родичі.

Зараз ми розповімо вам про ще один дуже потужний інструмент ООПполіморфізм. Він має чотири особливості.


2. Успадкування — не панацея

Уявіть, що ви для гри написали клас Корова. Він має багато полів і методів. Об'єкти цього класу можуть робити різні речі: ходити, їсти, спати. А ще корови дзвонять у дзвіночок, коли ходять. Припустімо, ви реалізували в класі все до найменших дрібниць.

А тут з'являється замовник проєкту й каже, що хоче випустити новий рівень гри, в якому всі дії відбуватимуться в морі, а головним героєм буде кит.

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

Поліморфізм у java

Клас Корова ідеально підходить на роль батьківського класу: він має всі необхідні змінні й методи. Досить тільки додати киту вміння плавати. Але є проблема: ваш кит має ноги, роги та ще й дзвіночок. Адже цю функціональність реалізовано в класі Корова. Що тут можна зробити?

Поліморфізм у java. Успадкування

3. Перевизначення методу

Нам на допомогу приходить перевизначення (заміна) методів. Якщо ми успадкували метод, який робить не зовсім те, що потрібно в нашому новому класі, ми можемо замінити цей метод на інший.

Перевизначення методу

Як це робиться? У нашому класі-нащадку ми оголошуємо такий самий метод, що й метод батьківського класу, який нам потрібно змінити. Пишемо в ньому новий код. І все: ніби старого методу в батьківському класі й не було.

От як це працює:

Код Опис
class Cow
{
   public void printColor ()
   {
      System.out.println("Я — біла");
   }

   public void printName()
   {
      System.out.println("Я — корова");
   }
}

class Whale extends Cow
{
   public void printName()
   {
      System.out.println("Я — кит");
   }
}
  • Тут визначено два класи — Cow і Whale
  • Whale успадковано від Cow
  • У класі Whale перевизначено метод printName()
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Цей код виводить на екран напис:
Я — корова
public static void main(String[] args)
{    Whale whale = new Whale();
   whale.printName();
}
Цей код виводить на екран напис:
Я — кит

Після успадкування від класу Cow й перевизначення методу printName клас Whale міститиме такі дані й методи:

class Whale
{
   public void printColor()
   {
      System.out.println("Я — біла");
   }

   public void printName()
   {
      System.out.println("Я — кит");
   }
}
Ні про який старий метод ми навіть і не знаємо.

Коментарі (6)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
IronMan57 Рівень 28
15 січня 2025
- Я лічу! - А я поліморфний трикутник.
Mazilla Рівень 32
6 листопада 2023
Мабуть найлегші задачі всього курсу )))
Sava_crosava Рівень 23
31 жовтня 2023
Початок мені подобається, вдячний за кумедні моменти в статті та у задачах)
Женя Иващенко Рівень 32
2 квітня 2023
Після того всього що було раніше це здається надто легко навіть)
Lipovskyi Volodymyr Рівень 36
26 червня 2022
Не надто складно, як для 18 рівня)
Василь Рівень 4
23 жовтня 2023
так і є. Початок ООП доволі легкий і не менш цікавий. Справа в тому що на попередніх рівнях ми багато заглядали під капот колекцій і різних методів класів (навіть коли ми писали свою колекцію то ми використовували ООП, наприклад перевизначення методів). А тут починаємо трошки іншу ланку і з азів. Але далі буде складніше і цікавіше.