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

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

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

Вступ

Перевантаження методів

У Java перевантаження методів дозволяє класу мати більше ніж один метод з однаковою назвою, якщо їхні списки параметрів відрізняються. Воно повʼязане з поліморфізмом часу компіляції (або статичним поліморфізмом). Ця концепція важлива для створення методів, які виконують схожі завдання, але з різними вхідними даними.

Навіщо перевантажувати методи?

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

Як перевантажувати методи?

Ключ до перевантаження методів - сигнатура методу. Два методи будуть вважатися різними, якщо їхні сигнатури відрізняються. Є два способи перевантажити метод:

  1. Різна кількість параметрів: методи можуть мати однакову назву, але різну кількість параметрів.

    public class Display {
    
        public void show(int x) {
            System.out.println("Show with int: " + x);
        }
    
        public void show(int x, int y) {
            System.out.println("Show with two ints: " + x + ", " + y);
        }
    }
    
  2. Різні типи параметрів: методи можуть мати однакову назву й однакову кількість параметрів, але з різними типами.

    public class Display {
    
        public void show(int x) {
            System.out.println("Show with int: " + x);
        }
    
        public void show(String s) {
            System.out.println("Show with String: " + s);
        }
    }
    

Що варто памʼятати

  • Перевантажені методи повинні змінювати список аргументів.
  • Перевантажені методи можуть також змінювати тип поверненого значення, але сама лише зміна типу поверненого значення ще не робить метод перевантаженим.
  • Методи можна перевантажувати в тому самому класі або в підкласі.

У цій концепції ми розглянемо різні приклади та нюанси перевантаження методів у Java.

Вказівки

У цій вправі ми разом зі своїми найкращими друзями граємо в рольову гру під назвою «Wizard and Warriors». Наша роль - майстер гри, тобто людина, яка оживляє ігровий світ для гравців. Ключовий складник цього - описувати гравцям гру: який статус у персонажа, як має вигляд місто, до якого вони прямують, тощо.

На нас чекають пʼять завдань, у яких ми описуємо гравцям окремі частини гри.

1. Опишіть персонажа

Кожен персонаж має клас, рівень і кількість очок здоровʼя, і його описують так: "You're a level <LEVEL> <CLASS> with <HIT_POINTS> hit points.". Реалізуйте метод GameMaster.describe, який приймає Character як свій єдиний параметр і повертає його опис.

Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);

new GameMaster().describe(character);
// => "You're a level 4 Wizard with 28 hit points."

2. Опишіть пункт призначення

Кожен пункт призначення має назву та кількість мешканців, і його описують так: "You've arrived at <NAME>, which has <INHABITANTS> inhabitants.". Реалізуйте метод GameMaster.describe, який приймає Destination як свій єдиний параметр і повертає його опис.

Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);

new GameMaster().describe(destination);
// => "You've arrived at Muros, which has 732 inhabitants."

3. Опишіть спосіб подорожі

Персонажі можуть дістатися пункту призначення одним із двох способів:

  • Пішки, описано так: "You're traveling to your destination by walking."
  • Верхи, описано так: "You're traveling to your destination on horseback."

Реалізуйте метод GameMaster.describe, який приймає TravelMethod як свій єдиний параметр і повертає його опис.

new GameMaster().describe(TravelMethod.HORSEBACK);
// => "You're traveling to your destination on horseback."

4. Опишіть персонажа, який подорожує до пункту призначення

Коли персонаж подорожує до пункту призначення, це описують як поєднання окремих описів: "<CHARACTER> <TRAVEL_METHOD> <DESTINATION>". Реалізуйте метод GameMaster.describe, який приймає Character, Destination і TravelMethod як свої параметри та повертає його опис.

Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);

Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);

new GameMaster().describe(character, destination, TravelMethod.HORSEBACK);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination on horseback. You've arrived at Muros, which has 732 inhabitants."

5. Опишіть персонажа, який подорожує до пункту призначення, не вказуючи спосіб подорожі

У більшості випадків персонажі подорожують до пункту призначення пішки. Для зручності гравцям дозволено не згадувати свій спосіб подорожі, і тоді вважається, що це пішки. Реалізуйте метод GameMaster.describe, який приймає Character і Destination як свої параметри та повертає його опис.

Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);

Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);

new GameMaster().describe(character, destination);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination by walking. You've arrived at Muros, which has 732 inhabitants."
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Java Exercism

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

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