1
resposta

Dúvida Ex.03 da Aula 04

class Empresa{

    String nomeDaEmpresa;
    String cnpj;
    Funcionario [] funcionarios;
    int livre = 0;

    void adiciona(Funcionario f) {
        this.funcionarios[this.livre] = f;
        this.livre++;
    }


    /*void adicionarFunciorio(Funcionario x){

        for(int i = 0;i < this.funcionarios.length;i++){
            this.funcionarios[0] = x;
            i++;
        }


    }*/

}


class TestaEmpresa{

    public static void main(String[] args) {

        Empresa padaria = new Empresa();
        padaria.funcionarios = new Funcionario[10];

        Funcionario empregado1 = new Funcionario();
        Funcionario empregado2 = new Funcionario();

        empregado1.nome = "Sebastião";
        empregado1.salario = 10000;
        padaria.adiciona(empregado1);

        empregado2.nome = "Sivirino";
        empregado2.salario = 25000;
        padaria.adiciona(empregado2);


        System.out.println(padaria.funcionarios[0]);
        System.out.println(padaria.funcionarios[1]);

        }    
}

Boa tarde!

Tudo executa perfeitamente, entretanto está imprimindo o endereço de memória onde os empregados foram armazenados.

Onde eu devo corrigir para que seja impresso os dados dos empregados cadastrados?

Obrigado.

1 resposta

Olá Douglas, boa tarde.

Funcionário é um objeto, e herda implicitamente de Object. Ao dar um sysout em um objeto funcionario, o método sysout espera como argumento uma String, logo, ao passar um objeto, a JVM recorrerá automaticamente a qual é a representação textual daquele objeto.

Como a sua classe Funcionario não especifica este comportamente, é chamado o toString() da classe mãe, no caso Object, que acaba mostrando isso que você está vendo.

Para mudar isso, basta ir na classe Funcionario e sobrescrever o método toString(), ficando algo assim, por exemplo:

@Override
 public String toString() {
    return "[Funcionario: " + this.nome + ", Salario: " + this.salario + "]";
 }

Abraço.