In Java, il sovraccarico dei metodi è una funzionalità che consente a una classe di avere più di un metodo con lo stesso nome, se le loro liste di parametri sono diverse. È legato al polimorfismo a tempo di compilazione (o statico). Questo concetto è fondamentale per creare metodi che svolgono compiti simili ma con input diversi.
Il sovraccarico dei metodi aumenta la leggibilità del programma. A metodi diversi si può dare lo stesso nome, ma con parametri diversi. A seconda del numero o del tipo dei parametri, viene chiamato il metodo corrispondente.
La chiave del sovraccarico dei metodi è la firma del metodo. Due metodi sono considerati diversi se hanno firme diverse. Ci sono due modi per sovraccaricare un metodo:
Numero di parametri diverso: i metodi possono avere lo stesso nome ma un numero diverso di parametri.
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);
}
}
Tipi di parametri diversi: i metodi possono avere lo stesso nome e lo stesso numero di parametri, ma con tipi diversi.
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);
}
}
In questo concetto, esploreremo vari esempi e sfumature del sovraccarico dei metodi in Java.
In questo esercizio giochi a un gioco di ruolo chiamato «Wizard and Warriors» con i tuoi migliori amici. Sei il Game Master, la persona che ha il compito di far prendere vita al mondo di gioco per i giocatori. Un aspetto fondamentale è descrivere il gioco ai giocatori: qual è lo stato di un personaggio, che aspetto ha la città che stanno visitando, e così via.
Hai cinque compiti che ti chiedono di descrivere ai giocatori alcune parti del gioco.
Ogni personaggio ha una classe, un livello ed un numero di punti ferita e viene descritto così: "You're a level <LEVEL> <CLASS> with <HIT_POINTS> hit points.".
Implementa il metodo GameMaster.describe, che prende un Character come unico parametro e ne restituisce la descrizione.
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."
Ogni destinazione ha un nome ed un numero di abitanti e viene descritta così: "You've arrived at <NAME>, which has <INHABITANTS> inhabitants.".
Implementa il metodo GameMaster.describe, che prende una Destination come unico parametro e ne restituisce la descrizione.
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(destination);
// => "You've arrived at Muros, which has 732 inhabitants."
I personaggi possono raggiungere una destinazione in uno dei due modi seguenti:
"You're traveling to your destination by walking."
"You're traveling to your destination on horseback."
Implementa il metodo GameMaster.describe, che prende un TravelMethod come unico parametro e ne restituisce la descrizione.
new GameMaster().describe(TravelMethod.HORSEBACK);
// => "You're traveling to your destination on horseback."
Quando un personaggio viaggia verso una destinazione, la descrizione è una combinazione delle singole descrizioni: "<CHARACTER> <TRAVEL_METHOD> <DESTINATION>".
Implementa il metodo GameMaster.describe, che prende un Character, una Destination ed un TravelMethod come parametri e ne restituisce la descrizione.
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."
Nella maggior parte dei casi, i personaggi raggiungono una destinazione a piedi.
Per comodità, i giocatori possono omettere il metodo di viaggio; in tal caso si dà per scontato che viaggino a piedi.
Implementa il metodo GameMaster.describe, che prende un Character ed una Destination come parametri e ne restituisce la descrizione.
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."
Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.