1
resposta

O retorno está errado

class Funcionario{ String nome; String departamento; double salario; Admissao data; String rg;

void recebeAumento(double valor){ this.salario = salario + valor;

}

double calculoGanhoAnual(){ // visto que vou querer saber o valor do salario anual é preciso haver um retorno, por isso do return return this.salario * 12; }

void mostra(){ System.out.println("Nome: " + this.nome); System.out.println("Departamento: " + this.departamento); System.out.println("Salario: " + this.salario); System.out.println("Data de admissao: " + this.data); System.out.println("rg: " + this.rg); } } class Admissao{ int dia; int mes; int ano;

void preencheData (int dia, int mes, int ano) { this.dia = dia; this.mes = mes; this.ano = ano; } }

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

Funcionario f1 = new Funcionario();

f1.nome = "Mariana"; f1.salario = 100; f1.data = new Admissao(); f1.data.preencheData(15,05,16);

f1.mostra(); /*Funcionario f2 = f1;

if(f1 == f2){ System.out.println("iguais"); } else { System.out.println("diferentes"); }*/

} }

A saída da data de admissão está sendo : Admissao@1db9742 e não sei como mudar, o que está errado?

1 resposta

Boa tarde,

Na classe Admissao você deve sobrescrever o método toString() de Object para que mostre como você quer. Algo como:

@Override
public String toString() {
    return this.dia + "/" + this.mes + "/" + this.ano;
}

Exibir o valor de um atributo em um sysout só da certo se for um tipo primitivo, se for um objeto é necessário que o toString() esteja implementado. No caso da classe String dá certo, porque ela tem o toString() de Object sobrescrito também. Mas a sua classe Admissao não tem, então o Java não sabe como exibir o valor do seu objeto, você deve dizer a ele através do toString.

Abraços.