Duvida Com Arrays[Resolvido]

Boa noite a todos, seguindo meus estudos tenho uma dúvida com relação ao código abaixo:

import java.util.*;
class Empregado{}
class Gerente extends Empregado{}
class Diretor extends Gerente{
	String nome;
	Diretor(String nome){
		this.nome = nome;
	}
	public String toString(){
		return nome;
	}
}
public class Teste10 {
	static void adicionar(Empregado [] e){
		e[0] = new Diretor("Roberto");
		e[1] = new Diretor("Carlos");
		e[2] = new Diretor("Marcelo");
	}
	public static void main(String[] args) {
		Diretor [] d = new Diretor[3];
		d[0] = new Diretor("Astolfo");
		adicionar(d);
		for(Diretor x : d)
			System.out.println( x + " ");
	}
}

Entendi que passar um array de Diretores para um metodo que espera receber um array de empregados neste caso é possivel, porque o array de Empregados só adiciona Diretores, porém não entendi porque o Diretor “Astolfo” não é exibido, é devido ao fato de ele tentar substituir o nome que já foi atribuido no indixe 0 do array de Empregados? Fiz um teste colocando mais uma posição no array de Diretores, e assim a String Astolfo foi impressa. Se alguém puder me ajudar didaticamente com este exemplo eu agradeço muito.Abraços.

Não vou me arriscar a responder errado. Tambem aguardo a reposta

Quando vc passou sua variavel “d” para o metodo adicionar voce esta passando a mesma referencia do array criado na memoria, entao tanto a variavel “e” quanto “d” apontam para o mesmo lugar, entao quando vc sobreescreve o objeto adicionado no indice 0 que era o Astolfo logo nao vai aparecer mesmo.

Um desenho bem grotesco mas da pra vc entender seria esse. Onde da pra vc perceber que suas variaveis de referencia estao apontando para o mesmo objeto.


Olá Everton,

Resposta muito esclarecedora a sua, valeu mesmo, consegui entender com as poucas linhas que você colocou e também com o desenho, mesmo tosco, como diz você, rsrsrrs, muito obrigado.