Olá, não sei se entendi bem sua dúvida. Espero que eu consiga ajudar....
Quando você cria um array da classe alunos ele ainda não possui nada. Cada posição deste array está vazia.
Só pq você está criando e instanciando um array da classe Alunos, não quer dizer que ele está populado.
Ao criar um array da classe Aluno, você fazendo com que ele só possa receber objetos do tipo Aluno.
Se quiser incluir algo na posição 0 desse array vai ter que ser um Aluno, afinal de contas, foi esse o tipo do array que declarou.
Para que eu inclua um Aluno na posição 0 esse aluno que tem existir, para isso você tem que instanciar um objeto da classe Aluno:
Aluno aluno = new Aluno();
Agora minha variável aluno é de fato um objeto da classe aluno. Portanto, posso incluir na posição 0:
aluno[0] = aluno;
Se eu quiser, posso incluir esse mesmo aluno em todas as posições do array:
aluno[0] = aluno;
aluno[1] = aluno;
E se eu tiver alunos diferentes, tenho que instanciar um objeto da classe Aluno para cada um deles:
Aluno aluno_gustavo = new Aluno();
Aluno aluno_maria = new Aluno();
Aluno aluno_joao = new Aluno();
depois posso popular o array criado previamente:
aluno[0] = aluno_gustavo;
aluno[1] = aluno_maria;
aluno[2] = aluno_joao;