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

Exercício 4 Aula 5 - Problemas com o private do array

Olá, Estou tendo um problema para compilar o meu código. Ao colocar private no Array em empresas, ele não permite a criação das posições dentro de uma em "TesteEmpresa" pois acusa a que o mesmo está como private. Não entendi exatamente o que preciso fazer.

class empresa {

    private String Nome;
    private long cnpj;
    private Funcionario[] empregados;
    private int livre = 0;

    public Funcionario getFuncionario(int posicao){
        return this.empregados[posicao];
    }

    public void setNome(String Nome){
        this.Nome = Nome;
    }
    public String getNome(){
        return this.Nome;
    }

    public void setcnpj(long cnpj){
        this.cnpj = cnpj;
    }
    public long getcnpj(){
        return this.cnpj;
    }

    void adicionar(Funcionario f) {
        this.empregados[this.livre] = f;
        this.livre++;
    }

    void mostraEmpregados() {
        for(int i = 0; i < this.empregados.length; i++) {
            if(this.empregados[i] !=null) {
            System.out.println("Funcionario na posicao " + this.empregados[i].nomeFuncionario);
            System.out.println("Salario do Funcionario " + this.empregados[i].nomeFuncionario + " e de " + this.empregados[i].salario);
            }
        }
    }

    void mostraTodasAsInformacoes () {
        System.out.println("Empresa " + this.Nome);
        System.out.println("CNPJ" + this.cnpj);
        for(int i = 0; i < this.empregados.length; i++) {
            if(this.empregados[i] !=null) {
            System.out.println("Funcionario " + this.empregados[i].nomeFuncionario + " Na posicao " + this.empregados[i]);
            System.out.println("Salario do Funcionario " + this.empregados[i].nomeFuncionario + " e de " + this.empregados[i].salario);
            }
        }
    }
}
class Funcionario {
    int salario;
    String nomeFuncionario;
}
class TesteEmpresa {
    public static void main(String[] args) {
    empresa abc = new empresa();
    abc.empregados = new Funcionario[10];

    abc.setNome("ABC Corp");
    abc.setcnpj(1234567);

    Funcionario f1 = new Funcionario();
    f1.nomeFuncionario = "f1";
    f1.salario = 1000;
    abc.adicionar(f1);    

    Funcionario f2 = new Funcionario();
    f2.nomeFuncionario = "f2";
    f2.salario = 2000;
    abc.adicionar(f2);

    Funcionario f3 = new Funcionario();
    f3.nomeFuncionario = "f3";
    f3.salario = 960;
    abc.adicionar(f3);

    abc.mostraTodasAsInformacoes();
    }
}
2 respostas
solução!

Olá Lucas,

de fato quando você declara um atributo como sendo private a ideia é que ele não poderá ser chamado diretamente por outras classes. Por isso que na classe TesteEmpresa, ao tentar fazer:

abc.empregados = new Funcionario[10];

ele acusa erro dado que a visibilidade dado que este atributo não é mais visível (privado) para quem está fora da Empresa.

Só que de alguma forma o seu array precisa ser inicializado. O que você pode fazer é o mesmo esquema que foi mostrado na classe Conta com a classe Cliente:

class Cliente {
    String nome;
    String sobrenome;
    String cpf;
}

class Conta {
    int numero;
    double saldo;
    double limite;
    Cliente titular = new Cliente();  // quando chamarem new Conta,  havera um new Cliente para ele.
}

No exemplo acima, quando eu der new Conta(), automaticamente um Cliente também será criado e atribuído ao titular.

Da forma parecida, toda vez que você der new empresa(), o atributo empregados já poderia ser criado automaticamente com um array de 10 posições (new Funcionario[10]).

Obrigado Lucas, Entendi perfeitamente!