A Java nyelvben a metódus-túlterhelés egy olyan lehetőség, amelynek segítségével egy osztálynak több azonos nevű metódusa is lehet, ha a paraméterlistáik eltérnek. A fordítási idejű (vagy statikus) polimorfizmushoz kapcsolódik. Ez a fogalom kulcsfontosságú ahhoz, hogy hasonló feladatokat ellátó, de eltérő bemenetű metódusokat hozzunk létre.
A metódus-túlterhelés növeli a program olvashatóságát. Különböző metódusoknak lehet ugyanaz a nevük, de eltérő paramétereik vannak. A paraméterek számától vagy típusától függően a megfelelő metódus hívódik meg.
A metódus-túlterhelés kulcsa a metódus szignatúrája. Két metódus akkor számít különbözőnek, ha eltér a szignatúrájuk. Kétféleképpen terhelhetünk túl egy metódust:
Eltérő paraméterszám: A metódusoknak lehet ugyanaz a nevük, de eltérő lehet a paraméterszámuk.
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);
}
}
Eltérő paramétertípusok: A metódusoknak lehet ugyanaz a nevük és ugyanannyi paraméterük, de eltérő típusúak.
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);
}
}
E fogalom során a metódus-túlterhelés különféle példáit és árnyalatait járjuk körbe Java nyelven.
Ebben a feladatban egy „Wizard and Warriors” nevű szerepjátékot játszol a legjobb barátaiddal. Te vagy a játékmester, az, akinek az a dolga, hogy életre keltse a játék világát a játékosok számára. Ennek kulcsfontosságú része, hogy leírd a játékot a játékosoknak: mi egy karakter állapota, hogy néz ki a város, amit éppen meglátogatnak, és így tovább.
Öt részfeladat vár rád, amelyekben a játék egyes részeit írod le a játékosoknak.
Minden karakternek van osztálya, szintje és életerőpontja, a leírása pedig így néz ki: "You're a level <LEVEL> <CLASS> with <HIT_POINTS> hit points.".
Valósítsd meg a GameMaster.describe metódust, amely egyetlen paraméterként egy Character objektumot kap, és visszaadja annak leírását.
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."
Minden célállomásnak van neve és lakosságszáma, a leírása pedig így néz ki: "You've arrived at <NAME>, which has <INHABITANTS> inhabitants.".
Valósítsd meg a GameMaster.describe metódust, amely egyetlen paraméterként egy Destination objektumot kap, és visszaadja annak leírását.
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(destination);
// => "You've arrived at Muros, which has 732 inhabitants."
A karakterek kétféle módon utazhatnak egy célállomásra:
"You're traveling to your destination by walking."
"You're traveling to your destination on horseback."
Valósítsd meg a GameMaster.describe metódust, amely egyetlen paraméterként egy TravelMethod értéket kap, és visszaadja annak leírását.
new GameMaster().describe(TravelMethod.HORSEBACK);
// => "You're traveling to your destination on horseback."
Amikor egy karakter egy célállomásra utazik, azt az egyes leírások kombinációjaként írjuk le: "<CHARACTER> <TRAVEL_METHOD> <DESTINATION>".
Valósítsd meg a GameMaster.describe metódust, amely paraméterként egy Character, egy Destination és egy TravelMethod értéket kap, és visszaadja annak leírását.
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."
A legtöbb esetben a karakterek gyalog utaznak egy célállomásra.
A kényelem kedvéért a játékosok elhagyhatják az utazási mód megemlítését, ilyenkor az utazási mód alapértelmezés szerint a gyaloglás lesz.
Valósítsd meg a GameMaster.describe metódust, amely paraméterként egy Character és egy Destination objektumot kap, és visszaadja annak leírását.
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."
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Java nyelvet 26 fogalom158 feladat segítségével, valódi emberi mentorálással, mindez ingyen.