Em Java, a sobrecarga de métodos é um recurso que permite que uma classe tenha mais de um método com o mesmo nome, desde que as listas de parâmetros sejam diferentes. Ela está relacionada ao polimorfismo em tempo de compilação (ou estático). Esse conceito é essencial para criar métodos que realizam tarefas parecidas, mas com entradas 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 da quantidade de parâmetros ou do tipo dos parâmetros, o método correspondente é chamado.
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:
Quantidade diferente de parâmetros: os métodos podem ter o mesmo nome, mas uma quantidade 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 de parâmetros diferentes: os métodos podem ter o mesmo nome e a mesma quantidade 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, você está jogando um jogo de RPG chamado "Wizard and Warriors" com seus melhores amigos. Você é o Mestre do Jogo, a pessoa encarregada de fazer o mundo do jogo ganhar vida para os jogadores. Um aspecto fundamental disso é descrever o jogo para os jogadores: qual é o status de um personagem, como é a cidade que eles estão visitando, etc.
Você tem cinco tarefas nas quais descreve partes do jogo para os jogadores.
Cada personagem tem uma classe, um nível e uma quantidade de pontos de vida, e é descrito assim: "You're a level <LEVEL> <CLASS> with <HIT_POINTS> hit points.".
Implemente o método GameMaster.describe, que recebe um Character como único parâmetro e retorna 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 assim: "You've arrived at <NAME>, which has <INHABITANTS> inhabitants.".
Implemente o método GameMaster.describe, que recebe um Destination como único parâmetro e retorna 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."
Os 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."
Implemente o método GameMaster.describe, que recebe um TravelMethod como único parâmetro e retorna sua descrição.
new GameMaster().describe(TravelMethod.HORSEBACK);
// => "You're traveling to your destination on horseback."
Quando um personagem está viajando até um destino, isso é descrito como uma combinação das descrições individuais: "<CHARACTER> <TRAVEL_METHOD> <DESTINATION>".
Implemente o método GameMaster.describe, que recebe um Character, um Destination e um TravelMethod como parâmetros e retorna 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, os personagens viajam até um destino a pé.
Por conveniência, os jogadores podem omitir o método de viagem; nesse caso, assume-se que a viagem é feita a pé.
Implemente o método GameMaster.describe, que recebe um Character e um Destination como parâmetros e retorna 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."
Crie sua conta no Exercism para aprender e dominar Java com 26 conceitos158 exercícios e mentoria humana de verdade, tudo de graça.