1
resposta

Erro ao tentar criar Array com setter para classe encapsulada.

Pessoal, boa tarde.

Estou com problemas ao tentar executar a classe Main. Ela compila e roda mas está retornando null; Não sei o que estou fazendo de errado neste caso de encapsulamento ao tentar usar um Setter para criar os empregados que usam a classe Funcionarios (com atributos private);

EDIT: Eu notei que estou apenas populando a posição 0 do array, mas foi só pra fazer um teste.

Obrigado!

class Empresa{
    private int registro;
    private Funcionario [] empregados;
    private int livre = 0;

    public Empresa(){
        empregados = new Funcionario [10];
    }

    public void setRegistro(int reg){
        this.registro = reg;
    }
    public int getRegistro(){
        return this.registro;
    }
    public void setEmpregados(){

        empregados[0].setNome("marcus");
        empregados[0].setSalario(7000);


    }
    public Funcionario getNomeFuncionario(int pos){
        return this.empregados[pos];
    }
}

class Funcionario{
    private String nome = "marcus";
    private double salario = 7000;

    public Funcionario (){

    }

    public Funcionario(String nome){
        this.nome = nome;
    }

    public void setNome(String nome1){
        this.nome = nome1;
    }
    public String getNome(){
        return this.nome;
    }
    public double getSalario (){
        return this.salario;
    }

    public void setSalario(double salario1){
        this.salario = salario1;
    }

}

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

        Empresa sidia = new Empresa();
        sidia.setRegistro(1);
        System.out.println(sidia.getRegistro());
        //sidia.setEmpregados();
        System.out.println(sidia.getNomeFuncionario(0));

    }

}
1 resposta

Olá Marcus, tudo beleza por aí?

Cheguei pra ajudar nos seus estudos. É muito simples mas precisa de bastante atenção sobre essas coisas quando programamos em JAVA.

Vamos lá?

primeiro descomenta o código:

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

        Empresa sidia = new Empresa();
        sidia.setRegistro(1);
        System.out.println(sidia.getRegistro());
        sidia.setEmpregados();//descomenta esse cara
        System.out.println(sidia.getNomeFuncionario(0));

    }

}

e agora o mais importante

public void setEmpregados(){
        empregados[0] =  new Funcionario();// muito importante esta linha
        empregados[0].setNome("marcus");
        empregados[0].setSalario(7000);
    }

A linha que adicionei é muito importante, pois ela quem inicializa a variável naquela posição do vetor, existem outras formas mais interessantes para utilizar este conceito, mas não quis mudar sua linha de raciocínio.

Quando declaramos um vetor não necessariamente cada posição já está instanciada, por isso quando trabalhamos com objetos devemos inicializar lo utilizando um de seus construtores e só depois atribuir a x posição.

Espero ter ajudado e contribuído com seus estudos. Qualquer duvida só voltar ao forum.

Abraço. Bons Estudos.