Olá, Thiago. Tudo tranquilo graças a Deus.
Faz sentido o que você falou porém o array de contas na posição contas[1] continua uma Conta[] e o cast é apenas na posição contas[0].
package br.com.bytebank.banco.test;
import br.com.bytebank.banco.modelo.Conta;
import br.com.bytebank.banco.modelo.ContaCorrente;
import br.com.bytebank.banco.modelo.ContaPoupanca;
public class TestArrayReferencias {
public static void main(String[] args) {
// alterando o tipo
Conta[] contas = new Conta[5];
ContaCorrente cc1 = new ContaCorrente(22, 11);
contas[0] = cc1;
// cria instância de ContaPoupanca
ContaPoupanca cc2 = new ContaPoupanca(22, 22);
contas[1] = cc2;
System.out.println(contas[1].getNumero());
// alterou o tipo, realizando o cast
ContaCorrente ref = (ContaCorrente) contas[0];
System.out.println(cc2.getNumero());
System.out.println(ref.getNumero());
}
}
Fiz uma alteração conforme o código abaixo aí gerou o erro como já era esperado.
Exception in thread "main" java.lang.ClassCastException: br.com.bytebank.banco.modelo.ContaPoupanca cannot be cast to br.com.bytebank.banco.modelo.ContaCorrente
at br.com.bytebank.banco.test.TestArrayReferencias.main(TestArrayReferencias.java:25)
package br.com.bytebank.banco.test;
import br.com.bytebank.banco.modelo.Conta;
import br.com.bytebank.banco.modelo.ContaCorrente;
import br.com.bytebank.banco.modelo.ContaPoupanca;
public class TestArrayReferencias {
public static void main(String[] args) {
// alterando o tipo
Conta[] contas = new Conta[5];
ContaCorrente cc1 = new ContaCorrente(22, 11);
contas[0] = cc1;
// cria instância de ContaPoupanca
ContaPoupanca cc2 = new ContaPoupanca(22, 22);
contas[1] = cc2;
System.out.println(contas[1].getNumero());
// alterou o tipo, realizando o cast
ContaCorrente ref = (ContaCorrente) contas[0];
ContaCorrente ref1 = (ContaCorrente) contas[1];
System.out.println(cc2.getNumero());
System.out.println(ref.getNumero());
}
}