Em Java, a sobrecarga de métodos é uma funcionalidade que permite que uma classe tenha mais do que um método com o mesmo nome, desde que as suas listas de parâmetros sejam diferentes. Está relacionada com polimorfismo em tempo de compilação (ou estático). Este conceito é crucial para criar métodos que realizam tarefas semelhantes, mas com parâmetros diferentes.
A sobrecarga de métodos aumenta a legibilidade do programa. Métodos diferentes podem receber o mesmo nome, mas com parâmetros diferentes. Dependendo do número de parâmetros ou do tipo de parâmetros, é chamado o método correspondente.
A chave para a sobrecarga de métodos é a assinatura do método. Dois métodos são considerados diferentes se tiverem assinaturas diferentes. Há duas formas de sobrecarregar um método:
Número diferente de parâmetros: Os métodos podem ter o mesmo nome, mas um número diferente de parâmetros.
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);
}
}
Tipos diferentes de parâmetros: Os métodos podem ter o mesmo nome e o mesmo número de parâmetros, mas com tipos diferentes.
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);
}
}
Neste conceito, vamos explorar vários exemplos e nuances da sobrecarga de métodos em Java.
Neste exercício vais jogar um jogo de interpretação de papéis chamado "Wizard and Warriors" com os teus melhores amigos. Tu és o Mestre de Jogo, a pessoa encarregada de dar vida ao mundo do jogo para os jogadores. Um aspeto essencial disto é descrever o jogo aos jogadores: qual é o estado de uma personagem, como é a vila que estão a visitar, etc.
Tens cinco tarefas nas quais descreves partes do jogo aos jogadores.
Cada personagem tem uma classe, um nível e um número de pontos de vida e é descrita como: "You're a level <LEVEL> <CLASS> with <HIT_POINTS> hit points.".
Implementa o método GameMaster.describe, que recebe um Character como único parâmetro e devolve a sua descrição.
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."
Cada destino tem um nome e um número de habitantes e é descrito como: "You've arrived at <NAME>, which has <INHABITANTS> inhabitants.".
Implementa o método GameMaster.describe, que recebe um Destination como único parâmetro e devolve a sua descrição.
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(destination);
// => "You've arrived at Muros, which has 732 inhabitants."
As personagens podem viajar até um destino de duas formas:
"You're traveling to your destination by walking."
"You're traveling to your destination on horseback."
Implementa o método GameMaster.describe, que recebe um TravelMethod como único parâmetro e devolve a sua descrição.
new GameMaster().describe(TravelMethod.HORSEBACK);
// => "You're traveling to your destination on horseback."
Quando uma personagem viaja até um destino, isso é descrito como uma combinação das descrições individuais: "<CHARACTER> <TRAVEL_METHOD> <DESTINATION>".
Implementa o método GameMaster.describe, que recebe um Character, um Destination e um TravelMethod como parâmetros e devolve a sua descrição.
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."
Na maioria dos casos, as personagens viajam até um destino a pé.
Por conveniência, os jogadores podem omitir o método de viagem, e nesse caso assume-se que a viagem é feita a pé.
Implementa o método GameMaster.describe, que recebe um Character e um Destination como parâmetros e devolve a sua descrição.
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."
Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.