Para responder a questão, tive que olhar no fórum o que estavam dizendo. Consegui compilar e tudo mais, mas notei que não faz a menor diferença, na verdade no main o que está importando mesmo é o "Funcionario[ ] f = new Funcionarios[10]" o que coloco no "Empresa empresa = new Empresa(1)" é descartado.
Meus códigos para analisar:
class Empresa {
private String nome;
private String cnpj;
private Funcionario[] empregados;
private int livre = 0;
public Empresa(int qtdFuncionarios) {
this.empregados = new Funcionario[qtdFuncionarios];
}
//para poder aceitar o array empregados que é privado e o TestaEmpresa não consegue alterar
public void setEmpregados (Funcionario[] empregados) {
this.empregados = empregados;
}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCnpj() {
return this.cnpj;
}
public void setCnpj(String cnpj) {
this.cnpj = cnpj;
}
public Funcionario getFuncionario(int posicao) {
return this.empregados[posicao];
}
public void adicionar(Funcionario f) {
this.empregados[this.livre] = f;
this.livre++;
}
public void getEmpregados() {
for(int i=0; i<this.livre; i++) {
if(this.empregados[i] == null) continue;
System.out.println(this.nome+"\t"+this.cnpj);
System.out.println("Funcionário na posição: "+i);
this.empregados[i].mostra();
}
}
public boolean contem(Funcionario f) {
for(int i=0; i<this.empregados.length; i++) {
if(this.empregados[i] == null) continue;
if(f == this.empregados[i]) {
return true;
}
}
return false;
}
}
class TestaEmpresa {
public static void main(String[] args) {
Empresa empresa = new Empresa(1);
Funcionario[] f = new Funcionario[2];
empresa.setEmpregados(f);
empresa.setNome("BlaBla CO.");
empresa.setCnpj("123456/00001");
Funcionario f1 = new Funcionario();
f1.setNome("Fulano de tal");
f1.setDepartamento("Conceitual Generalista");
f1.setSalario(2500.0);
//solução para poder formatar a data em uma única linha e ainda respeitar o private da variável admissao
Data d = new Data();
d.preencheData(1, 3, 2015);
f1.setAdmissao(d);
f1.setRg("123456");
empresa.adicionar(f1);
Funcionario f2 = new Funcionario();
f2.setNome("Siclano");
f2.setDepartamento("Conceitual Generalista");
f2.setSalario(2000.0);
//Data d = new Data();
d.preencheData(1, 3, 2016);
f2.setAdmissao(d);
f2.setRg("123456");
empresa.adicionar(f2);
//imprime todos os dados disponíveis do funcionário
empresa.getEmpregados();
}
}