2) A Empresa deve ter um método adiciona, que recebe uma referência a
Funcionario como argumento e
guarda esse funcionário. Algo como:
void adiciona(Funcionario f) {
// algo tipo:
// this.empregados[ ??? ] = f;
// mas que posição colocar?
}

Você deve inserir o Funcionario em uma posição da array que esteja
livre. Existem várias maneiras para
você fazer isso: guardar um contador para indicar qual a próxima posição
vazia ou procurar por uma
posição vazia toda vez. O que seria mais interessante?

É importante reparar que o método adiciona não recebe nome, rg, salário,
etc. Essa seria uma maneira
nem um pouco estruturada, muito menos orientada a objetos de se
trabalhar. Você antes cria um
Funcionario e já passa a referência dele, que dentro do objeto possui
rg, salário, etc.