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

Dúvida no Ex. 6 da Aula 3 - Começando com Orientação a objetos

Boa tarde!

Para resolver o exercício criei 3 classes:

1 - Classe DATA:

class Data{

    int dia;
    int mes;
    int ano;

    void preencheData (int dia, int mes, int ano){

        this.dia = dia;
        this.mes = mes;
        this.ano = ano;

    }

2 - Classe Funcionario:

class Funcionario {

    String nome;
    double salario;
    Data dataDeEntrada;

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

}

3- Classe Teste (main):

class Teste{

    public static void main (String[] args){

    Funcionario f1 = new Funcionario();

    f1.nome = "Anderson";
    f1.salario = 50.0;

    f1.dataDeEntrada = new Data();

    f1.dataDeEntrada.preencheData(20,12,13);

    f1.mostra();

    }
}

Ao rodar o TESTE, o programa exibe a data de forma errada, como segue:

Anderson 50.0 Data@15db9742


Duvida: Gostaria de saber o porquê de o valor da data estar dessa forma. Acredito que seja referência, mas não consegui achar o motivo. Podem me ajudar por favor?

Obrigado!!

3 respostas
solução!

Olá Saulo! Exatamente como você disse o que está sendo impresso é a referência ao objeto na memória. Isso esta ocorrendo porque por padrão quando imprimimos um Objeto é chamado o método toString() da classe Object pois toda classe em java herda da Classe Object. E esse método retorna uma String que é a referencia do Objeto na memória. Para isso não acontecer você pode simplesmente sobrescrever o método toString na sua classe Data retornando uma String da data formatada. Assim:

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

Ou simplesmente alterando o método mostra() para imprimir a data da seguinte forma:

 System.out.println(this.dataDeEntrada.dia + "/" + this.dataDeEntrada.mes + "/" + this.dataDeEntrada.ano);

Espero ter ajudado. Bons Estudos!

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

void preencheData(int dia, int mes, int ano){ this.dia = dia; this.mes = mes; this.ano = ano; } @Override public String toString() { return dia + "/" + mes + "/" + ano; } }

class Funcionario{ String nome; String RG; String departamento; double salario; Data dataDeEntrada;

void mostra(){ System.out.println("Nome: "+this.nome); System.out.println("Data: "+this.dataDeEntrada); }

void recebeAumento(double aumento){ salario+=aumento; } double calculaGanhoAnual(){ return 12*salario;

}

}

class Programa{

public static void main(String[] args) {

Funcionario f1 = new Funcionario(); f1.nome = "Danilo"; f1.salario = 100; f1.dataDeEntrada = new Data(); f1.dataDeEntrada.preencheData(7, 7, 1988);

f1.mostra(); } }

não entendi a parte do

 f1.dataDeEntrada = new Data();

f1.dataDeEntrada.preencheData(20,12,13);

por que não f1.dataDeEntrada = new Data(); ?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software