Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro ao imprimir data: Data@15db9742

Código:

class Data{
  int dia;
  int mes;
  int ano;

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

class funcionario{
  String nome;
  String departamento;
  double salario;
  Data dataEntrada;
  String rg;

  void mostra(){
    System.out.println(this.nome);
    System.out.println(this.salario);
    System.out.println(this.dataEntrada());
  }
}

class TestaFuncionario{
  public static void main(String[] args){
    funcionario f1 = new funcionario();

    f1.nome = "Hugo";
    f1.salario = 1000;

    f1.dataEntrada = new Data();
    f1.dataEntrada.recebeData(1 ,7, 2016);

    f1.mostra();
  }
}

Saída: Hugo 1000.0 Data@15db9742

4 respostas

Se você não sobrescre o método toString de uma classe, ao tentar imprimí-la (e consequentemente convertê-la para string) vai ser usado o toString de Object (do qual toda classe é descendente), que somente imprime o "endereço" hexadecimal do objeto.

Para ter uma impressão melhor, basta sobrescrever o método toString:

public class Data{ int dia; int mes; int ano;

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

@Override public String toString() { return "Dia: " + this.dia + " Mês: " + this.mes + " Ano: " + this.ano; } }

Thyago, como o Leonardo comentou, todo objeto criado em Java tem como "pai" o Object (ou seja, ele estende Object, como se diz tecnicamente). Isso quer dizer que mesmo que você chame um método que a classe filha não tem (no seu caso, a classe funcionario), se o Object tiver esse método, esse código vai compilar e rodar usando a implementação do pai. É o caso do método toString(), que existe em Object.

A implementação padrão do toString() na classe Object é apenas mostrar o endereço de memória do objeto que está chamando esse método (no seu caso, a funcionario). Para você mostrar dados relevantes, você sobrescreve esse método, ou seja, cria uma implementação própria dele, que vai ser usada pelo Java no lugar da implementação padrão da classe Object.

Assim:

@Override
public String toString(){ 
   return "Dia: " + this.dia + " Mês: " + this.mes + " Ano: " + this.ano; 
 }

Veja que o método retorna uma String simples, concatenando dia, mês e ano.

Esse @Override diz para o Java: "Compilador, use esse toString() aqui e não o da classe pai (Object)".

Esses conceitos de objetos "pai" e toString não foram apresentados ainda no curso. Tem uma maneira mais simples de printar esta classe Data?

solução!

Amigo, continue a fazer os execícios que a resposta está nos demais (9).

;)