У Java перевантаження методів дозволяє класу мати більше ніж один метод з однаковою назвою, якщо їхні списки параметрів відрізняються. Воно повʼязане з поліморфізмом часу компіляції (або статичним поліморфізмом). Ця концепція важлива для створення методів, які виконують схожі завдання, але з різними вхідними даними.
Перевантаження методів підвищує читабельність програми. Різним методам можна дати однакову назву, але з різними параметрами. Залежно від кількості параметрів або їхніх типів викликається відповідний метод.
Ключ до перевантаження методів - сигнатура методу. Два методи будуть вважатися різними, якщо їхні сигнатури відрізняються. Є два способи перевантажити метод:
Різна кількість параметрів: методи можуть мати однакову назву, але різну кількість параметрів.
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);
}
}
Різні типи параметрів: методи можуть мати однакову назву й однакову кількість параметрів, але з різними типами.
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». Наша роль - майстер гри, тобто людина, яка оживляє ігровий світ для гравців. Ключовий складник цього - описувати гравцям гру: який статус у персонажа, як має вигляд місто, до якого вони прямують, тощо.
На нас чекають пʼять завдань, у яких ми описуємо гравцям окремі частини гри.
Кожен персонаж має клас, рівень і кількість очок здоровʼя, і його описують так: "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."
Кожен пункт призначення має назву та кількість мешканців, і його описують так: "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."
Персонажі можуть дістатися пункту призначення одним із двох способів:
"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."
Коли персонаж подорожує до пункту призначення, це описують як поєднання окремих описів: "<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."
У більшості випадків персонажі подорожують до пункту призначення пішки.
Для зручності гравцям дозволено не згадувати свій спосіб подорожі, і тоді вважається, що це пішки.
Реалізуйте метод 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."
Зареєструйтеся на Exercism, щоб вивчати й опановувати Java, а також 26 концепцій158 вправ та справжнє наставництво від людей, і все це безкоштовно.