Успадкування - основний концепт ООП (обʼєктно-орієнтованого програмування). Воно описує відношення IS-A. У програмуванні воно означає буквально те саме, що й в англійській мові: успадкування характеристик від батьківського класу (у програмуванні такими характеристиками зазвичай є функції та змінні).
Розглянемо клас Animal, як показано нижче:
//Creating an Animal class with bark() as a member function.
public class Animal {
public void bark() {
System.out.println("This is an animal");
}
}
Animal - батьківський клас, тому що властивості, які має цей клас, можна поширити на всіх тварин загалом.
Розглянемо тварину на імʼя Lion, яка має такий клас:
//Lion class is a child class of Animal.
public class Lion extends Animal {
@Override
public void bark() {
System.out.println("Lion here!!");
}
}
Анотація Override вказує, що метод у підкласі перевизначає метод свого суперкласу.
Це не обовʼязково, але вважається найкращою практикою.
Тепер, коли ми робимо так:
Animal animal = new Lion(); //creating instance of Animal, of type Lion
animal.bark();
Зауваження: ініціалізація класу Animal обʼєктом Lion.
Виведення матиме такий вигляд:
Lion here!!
Згідно з ООП, існує багато типів успадкування, але Java підтримує лише деякі з них (багаторівневе та ієрархічне). Щоб дізнатися більше, прочитайте цю статтю.
У цій вправі ми граємо в рольову гру, де різні типи бійців можуть битися один з одним. Гра має різні правила для кожного типу бійців. Ми зосередимося на двох конкретних типах: Warrior і Wizard.
Ось правила для Warrior:
6 одиниць шкоди, якщо боєць, якого він атакує, не вразливий.10 одиниць шкоди, якщо боєць, якого він атакує, вразливий.Ось правила для Wizard:
12 одиниць шкоди, якщо він підготував закляття заздалегідь.3 одиниці шкоди, якщо він не підготував закляття заздалегідь.Warrior
Створіть новий клас Warrior.
Цей клас має успадковувати наявний клас Fighter.
Оновіть клас Warrior, щоб його метод toString() описував, який це боєць.
Метод має повертати рядок тексту (англ. string) "Fighter is a Warrior".
Warrior warrior = new Warrior();
warrior.toString();
// => "Fighter is a Warrior"
Оновіть клас Warrior, щоб його метод isVulnerable() завжди повертав false.
Warrior warrior = new Warrior();
warrior.isVulnerable();
// => false
Оновіть клас Warrior, щоб його метод getDamagePoints(Fighter) обчислював шкоду, яку завдає Warrior, згідно з правилами вище.
Warrior warrior = new Warrior();
Wizard wizard = new Wizard();
warrior.getDamagePoints(wizard);
// => 10
Wizard
Створіть ще один новий клас Wizard.
Цей клас також має успадковувати наявний клас Fighter.
Оновіть клас Wizard, щоб його метод toString() описував, який це боєць.
Метод має повертати рядок тексту "Fighter is a Wizard".
Wizard wizard = new Wizard();
wizard.toString();
// => "Fighter is a Wizard"
Оновіть клас Wizard, додавши метод prepareSpell().
Клас має запамʼятовувати, коли цей метод викликано, і стежити за тим, щоб його метод isVulnerable() повертав false лише тоді, коли закляття підготовлено.
Wizard wizard = new Wizard();
wizard.prepareSpell();
wizard.isVulnerable();
// => false
Оновіть клас Wizard, щоб його метод getDamagePoints(Fighter) обчислював шкоду, яку завдає Wizard, згідно з правилами вище.
Wizard wizard = new Wizard();
Warrior warrior = new Warrior();
wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
Зареєструйтеся на Exercism, щоб вивчати й опановувати Java, а також 26 концепцій158 вправ та справжнє наставництво від людей, і все це безкоштовно.