Como chamar um classe com seus atributos em um método?

    public void escolherPersonagem() {
	System.out
			.print("Digite o número correspondente ao tipo de classe que deseja jogar\n"
					+ "1: Feiticeiro\n2: Golem\n3: Lobisomem\nEscolha: ");
	escolha = entrada.nextInt();

	if (escolha == 1) {
		Feiticeiro feiticeiro = new Feiticeiro("Feiticeiro", 10, 13, 55);
		feiticeiro.info();
	} else if (escolha == 2) {
		Golem golem = new Golem("Golem", 15, 17, 40);
		golem.info();
	} else if (escolha == 3) {
		Lobisomem lobisomem = new Lobisomem("Lobisomem", 20, 9, 45);
		lobisomem.info();
	}
}

public void movimento() {

	Lobisomem lobisomem = new Lobisomem("Lobisomem", 20, 9, 50);

	int tempAtaque = lobisomem.getAtaque();
	int tempDefesa = lobisomem.getDefesa();
	int tempVida = lobisomem.getVida();`

Como pode ser visto no código acima tenho a opção de escolher um personagem para jogar, mas apenas o personagem lobisomem está habilitado, no método movimento para que os outros personagem sejam selecionados preciso criar outro método só que ao invés de lobisomem colocar Golem ou Feiticeiro?
Acho que ficaria muito repetitivo três métodos assim. Queria um único método que posso jogar com o escolhido.

1 curtida

Crie uma classe e dentro dela coloque seu metodo movimento como abstrato na classe que voce for realizar um movimento extenda com a classe criada com o metodo movimento depois e so sobrecarrega o comportamento do metodo movimento. Para maior entendimento leia sobre polimorfismo.

1 curtida

Foi isso que pensei, só achei que teria outra maneira de não criar uma classe movimento dentro de cada personagem. Mas isso funciona bem. Obrigado!

Existe sim um outra forma com uma implementação de um Padrão de Projeto chamado Strategy como representado nesse link

Outro exemplo aqui, na internet tem várias formas!

Eu percebi que tem um padrão em suas classes então isso ia funcionar e seria muito fácil a manutenção …

1 curtida

Mas hispo você não terá que criar uma classe movimento dentro de cada personagem, você só cria uma única vez, e sobrecarrega o metódo movimento dentro da classe ao qual você quer efetuar movimento.

1 curtida