Треки
/
Java
Java
/
Вправи
/
Чарівники та воїни
Чарівники та воїни

Чарівники та воїни

Навчальна вправа

Вступ

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

Успадкування - основний концепт ООП (обʼєктно-орієнтованого програмування). Воно описує відношення 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!!");
    }

}
Note

Анотація Override вказує, що метод у підкласі перевизначає метод свого суперкласу. Це не обовʼязково, але вважається найкращою практикою.

Тепер, коли ми робимо так:

Animal animal = new Lion(); //creating instance of Animal, of type Lion
animal.bark();

Зауваження: ініціалізація класу Animal обʼєктом Lion. Виведення матиме такий вигляд:

Lion here!!

Згідно з ООП, існує багато типів успадкування, але Java підтримує лише деякі з них (багаторівневе та ієрархічне). Щоб дізнатися більше, прочитайте цю статтю.

Вказівки

У цій вправі ми граємо в рольову гру, де різні типи бійців можуть битися один з одним. Гра має різні правила для кожного типу бійців. Ми зосередимося на двох конкретних типах: Warrior і Wizard.

Ось правила для Warrior:

  • Warrior ніколи не буває вразливим.
  • Warrior завдає 6 одиниць шкоди, якщо боєць, якого він атакує, не вразливий.
  • Warrior завдає 10 одиниць шкоди, якщо боєць, якого він атакує, вразливий.

Ось правила для Wizard:

  • Wizard може заздалегідь підготувати закляття.
  • Wizard вразливий, якщо він не підготував закляття заздалегідь.
  • Wizard завдає 12 одиниць шкоди, якщо він підготував закляття заздалегідь.
  • Wizard завдає 3 одиниці шкоди, якщо він не підготував закляття заздалегідь.

1. Створіть клас Warrior

Створіть новий клас Warrior. Цей клас має успадковувати наявний клас Fighter.

2. Опишіть Warrior

Оновіть клас Warrior, щоб його метод toString() описував, який це боєць. Метод має повертати рядок тексту (англ. string) "Fighter is a Warrior".

Warrior warrior = new Warrior();
warrior.toString();
// => "Fighter is a Warrior"

3. Зробіть Warrior невразливими

Оновіть клас Warrior, щоб його метод isVulnerable() завжди повертав false.

Warrior warrior = new Warrior();
warrior.isVulnerable();
// => false

4. Обчисліть одиниці шкоди для Warrior

Оновіть клас Warrior, щоб його метод getDamagePoints(Fighter) обчислював шкоду, яку завдає Warrior, згідно з правилами вище.

Warrior warrior = new Warrior();
Wizard wizard = new Wizard();

warrior.getDamagePoints(wizard);
// => 10

5. Створіть клас Wizard

Створіть ще один новий клас Wizard. Цей клас також має успадковувати наявний клас Fighter.

6. Опишіть Wizard

Оновіть клас Wizard, щоб його метод toString() описував, який це боєць. Метод має повертати рядок тексту "Fighter is a Wizard".

Wizard wizard = new Wizard();
wizard.toString();
// => "Fighter is a Wizard"

7. Дозвольте Wizard готувати закляття і робіть їх вразливими, коли закляття не підготовлено

Оновіть клас Wizard, додавши метод prepareSpell(). Клас має запамʼятовувати, коли цей метод викликано, і стежити за тим, щоб його метод isVulnerable() повертав false лише тоді, коли закляття підготовлено.

Wizard wizard = new Wizard();
wizard.prepareSpell();
wizard.isVulnerable();
// => false

8. Обчисліть одиниці шкоди для Wizard

Оновіть клас Wizard, щоб його метод getDamagePoints(Fighter) обчислював шкоду, яку завдає Wizard, згідно з правилами вище.

Wizard wizard = new Wizard();
Warrior warrior = new Warrior();

wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Java Exercism

Час розпочати Чарівники та воїни?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Java, а також 26 концепцій158 вправ та справжнє наставництво від людей, і все це безкоштовно.