Na verdade estou até refazendo o curso terminado, porque fiquei com dificuldade com esses arrays de objeto. Olha esse código:
class Empresa{
    Funcionario[] funcionario;
    String rs;
    String cnpj;
    int proximo=0;
    void criaFunc(){
        for(int i=0;i<funcionario.length;i++){
            funcionario[i] = new Funcionario();
        }
    }
    void adiciona(Funcionario f){
        this.funcionario[this.proximo]=new Funcionario();
        this.funcionario[this.proximo]=f;
        this.proximo++;
    }
    void mostra(){
        for(int i=0;i<funcionario.length;i++){
            if(this.funcionario[i]==null) continue;
            System.out.println("Funcionario "+(i+1)+"\nNome: "+funcionario[i].nome+"\nCPF: "+funcionario[i].CPF);
        }
    }
}
class Funcionario{
    String nome;
    String CPF;
    String data;
}
class BancoTri{
    public static void main(String[] args){
    Empresa escola = new Empresa();
    escola.funcionario = new Funcionario[10];
    //escola.criaFunc();
    Funcionario empregado = new Funcionario();
    empregado.nome = "Marcelo";
    empregado.CPF = "486611";
    escola.adiciona(empregado);    
    empregado.nome = "Thiago";
    empregado.CPF = "4616168";
    escola.adiciona(empregado);
    escola.mostra();
    System.out.println(escola.funcionario[0].nome);
    System.out.println(escola.funcionario[1].nome);
    }
}Da pra ver que não consigo ir adicionando funcionarios, como Thiago e depois marcelo, posto que o ultimo funcionario a ser adicionado ocupa a posição de todos os indices até então.
Seria pq estou mechendo no mesmo endereço de memória? O array pega a referencia do funcionario solto, né? Não cria uma cópia.
 
             
            