[Resolvido] Retorno de método de outra classe na classe main

Bom dia.
Estou fazendo uma atividade básica, pra faculdade, mas estou meio enferrujada em questão da classe main.
Já pesquisei, encontrei vários resultados, a maioria do GUJ, e consegui melhorar minhas classes.
Mas ainda estou com dúvidas, e não está retornando o que eu esperava, então resolvi pedir ajuda :wink:

minha classe main é a seguinte:

[code]import java.util.Scanner;

import Animal.Gato;

public class main {
public static void main (String args[]){

	System.out.println("Menu de Opções: ");
	System.out.println("1: Gato");
	System.out.println("2: Girafa");
	System.out.println("3: Auto Básico");
	System.out.println("4: Auto COmpleto");
	Scanner scan = new Scanner(System.in);  
	int opcao = scan.nextInt(); 
	
	if (opcao == 1){
		Gato gato = new Gato();
		gato.getAnimal("5 Kg", "Carnívoro", "Mamífero");
		System.out.println(gato);
	}
}

}
[/code]

e minha classe Gato:

[code]package Animal;

public class Gato {
public String getAnimal(String peso, String tipoal, String tipoan) {
Animal animal = new Animal();
peso = animal.Peso("");
tipoal = animal.TipoAlimentacao("");
tipoan = animal.TipoAnimal("");
return (peso + tipoal + tipoan);
}
}[/code]

classe animal:

[code]package Animal;

public class Animal {

public String Peso (String peso){
	return peso;
}

public String TipoAlimentacao (String tipoal){
	return tipoal;
}

public String TipoAnimal (String tipoan){
	return tipoan;
}

}[/code]

Tudo muito simples.
Minha dúvida é que, quando executo a main, e eu digito a opção, retorna o seguinte:

[quote]Menu de Opções:
1: Gato
2: Girafa
3: Auto Básico
4: Auto COmpleto
1
Animal.Gato@80f4cb[/quote]
o que eu fiz errado???
:?:

desde já agradeço se alguém puder me ajudar :stuck_out_tongue:

Quando você passa um objeto para o método System.out.println() ele imprime o resultado da chamada do método toString() sobre o objeto. No caso, ele está imprimindo o resultado da implementação padrão do método, que é o nomeDaClasse + “@” + idDoObjeto.

Bom, o que eu tenho que fazer então? :oops:

Você pode passar o resultado da chamada de getAnimal() diretamente para o System.out.println(), ou então não sua classe Gato você pode sobrescrever toString() para retornar o resultado de getAnimal().

Assim:

if (opcao == 1){ Gato gato = new Gato(); System.out.println(gato.getAnimal("5 Kg", "Carnívoro", "Mamífero")); } else if (opcao == 2){ Girafa girafa = new Girafa(); System.out.println(girafa.getAnimal("1 Tonelada", "Herbívoro", "Mamífero")); } else if (opcao == 3){ AutomovelBasico autobas = new AutomovelBasico(); System.out.println(autobas.getAuto("Opcional", "Não", "Gasolina")); } else if (opcao == 4){ AutomovelCompleto autocom = new AutomovelCompleto(); System.out.println(autocom.getAuto("Sim", "Sim", "Flex (Gasolina e Álcool")); }

Mas dai ele termina e não tras nada Oo :?

Ele traz sim, ele traz “” + “” + “”, pq é isso que vc está fazendo aqui.

public class Gato {
	public String getAnimal(String peso, String tipoal, String tipoan) {
		Animal animal = new Animal();
		peso = animal.Peso("");
		tipoal = animal.TipoAlimentacao("");
		tipoan = animal.TipoAnimal("");
		return (peso + tipoal + tipoan);
	}
}

Pq vc nao faz assim?

public class Gato {
	public String getAnimal(String peso, String tipoal, String tipoan) {
		Animal animal = new Animal();
		peso = animal.Peso(peso);
		tipoal = animal.TipoAlimentacao(tipoal);
		tipoan = animal.TipoAnimal(tipoan);
		return (peso + tipoal + tipoan);
	}
}

:wink:

Aliás, agora que vi… pq vc está setando o valor do peso, que vc passou por parâmetro, para a variável peso no metodo getAnimal?

Meu trabalho é o seguinte:

[quote]Crie uma classe Animal com 3 atributos
Crie uma classe Gato que seja uma classe filha da classe Animal;
Crie uma classe Girafa, filha da classe Animal;[/quote]

Ai, fiz a Classe animal, a gato e a girafa. Ai, na main eu chamei elas atraves de um menu de opções e de acordo com a opção, era pra trazer os dados. eu tinha setado os valores, por exemplo, na classe gato. Mas dai quando eu ia chamar o método na main, ele me pediu os valores, por isso que coloquei os valores na main. :? :oops:

Bom dia a todos.

Não está retornando nada, simplesmente porque na classe Gato, voce atribuiu valores nulos, assim:

package Animal;  
  
public class Gato {  
    public String getAnimal(String peso, String tipoal, String tipoan) {  
        Animal animal = new Animal();  
        peso = animal.Peso("");  // Atribuiu valor ""
        tipoal = animal.TipoAlimentacao("");   // Atribui valor ""
        tipoan = animal.TipoAnimal("");   // Atribui valor ""
        return (peso + tipoal + tipoan);   // Vai retornar valor ""
    }  
}

Mude a classe Gato e a de qualquer animal assim:

package Animal;  
  
public class Gato {  
    public String getAnimal(String peso, String tipoal, String tipoan) {  
        return (peso + tipoal + tipoan);  
    }  
}

Se voce pretende fazer persistencia na classe Animal então mude a sua classe animal assim:


public class Animal {

    private static String peso, tipoalimentacao, tipoanimal;  
      
    public static String getPeso (){  
        return peso;  
    }

    public static void setPeso(String peso){
        Animal.peso = peso;
    }  
      
    public static String tipoAlimentacao (){  
        return tipoalimentacao;  
    }

    public static void setTipoalimentacao(String tipoalimentacao){
        Animal.tipoalimentacao = tipoalimentacao;
    }  
  
    public static String tipoAnimal () {  
        return tipoanimal;  
    }

    public static void setTipoanimal(String tipoanimal){
        Animal.tipoanimal = animal;
    }  
}

E ai na classe Gato ou qualquer animal, voce fazer assim:


package Animal;  
  
public class Gato {  
    public String getAnimal(String peso, String tipoal, String tipoan) {   
        Animal.setPeso(peso);  
        Animal.setTipoalimentacao(tipoal);  
        Animal.setTipoanimal(tipoan);  
        return (peso + tipoal + tipoan);  
    }  
}  

Repare que ao declarar todos os métodos da classe Animal como estáticos a classe se torna totalmente estática, isto significa dizer que voce não precisa instanciar a classe Animal para acessar os seus métodos. Outra vantagem disto, é que os valores atribuídos nos métodos “sets” ficam inalterados e com uma única referência, permitindo assim, voce fazer a persistência de seus dados.

Deu certo, muito obrigada.
To meio enferrujada, mas já deu pra entender melhor :smiley: