Trilhas
/
Java
Java
/
Exercícios
/
Magos e guerreiros 2
Magos e guerreiros 2

Magos e guerreiros 2

Exercício de aprendizagem

Introdução

Sobrecarga de métodos

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.

Por que sobrecarregar métodos?

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.

Como sobrecarregar métodos?

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:

  1. 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);
        }
    }
    
  2. 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);
        }
    }
    

Pontos para lembrar

  • Métodos sobrecarregados precisam alterar a lista de argumentos.
  • Métodos sobrecarregados também podem alterar o tipo de retorno, mas apenas alterar o tipo de retorno não constitui sobrecarga de métodos.
  • Métodos podem ser sobrecarregados na mesma classe ou em uma subclasse.

Neste conceito, vamos explorar vários exemplos e nuances da sobrecarga de métodos em Java.

Instruções

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.

1. Descreva um personagem

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."

2. Descreva um destino

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."

3. Descreva o método de viagem

Os personagens podem viajar até um destino de duas formas:

  • A pé, descrito assim: "You're traveling to your destination by walking."
  • A cavalo, descrito assim: "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."

4. Descreva um personagem viajando até um destino

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."

5. Descreva um personagem viajando até um destino sem especificar o método de viagem

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."
Editar via GitHub O link abre em uma nova janela ou aba
Java Exercism

Tudo pronto para começar Magos e guerreiros 2?

Crie sua conta no Exercism para aprender e dominar Java com 26 conceitos158 exercícios e mentoria humana de verdade, tudo de graça.