Bom noite pessoal sou iniciante em java e estou com duvidas no exercicio 10 de Casting de referências
da apostila fj11 da Caelum ele me pede o seguite:
(opcional) Crie a classe GuardadorDeObjetos como visto nesse capítulo. Crie uma classe TestaGuardador e
dentro do main crie uma ContaCorrente e adicione-a em um GuardadorDeObjetos. Depois teste pegar essa
referência como ContaPoupanca, usando casting. Repare na exception que é lançada:
GuardadorDeObjetos guardador = new GuardadorDeObjetos();
ContaCorrente cc = new ContaCorrente();
guardador.adicionaObjeto(cc);
// vai precisar do casting para compilar!
// use Ctrl+1 para o Eclipse gerar para você
ContaPoupanca cp = guardador.pega(0);
Minha Classe GuardadorDeObjeto ficou assim:
[code]public class GuardadorDeObjetos
{
private Object[] arrayDeObjetos = new Object[100];
private int posicao = 0;
public void adcionaObjetos(Object objetos)
{
this.arrayDeObjetos[this.posicao] = objetos;
this.posicao++;
}
public Object pegaObjeto(int indice)
{
return this.arrayDeObjetos[indice];
}
}[/code]
E a testa Guardador Assim:
[code]public class TestaGuardador
{
public static void main(String[] args)
{
GuardadorDeObjetos guardador = new GuardadorDeObjetos();
ContaCorrente cc = new ContaCorrente();
cc.setSaldo(100.02);
guardador.adcionaObjetos(cc);
Object objeto = guardador.pegaObjeto(0);
ContaPoupanca cp = (ContaPoupanca) objeto;
}
}[/code]
Mais na compilação me retorna a seguinte exeption:
Exception in thread "main" java.lang.ClassCastException: br.com.empresa.banco.conta.ContaCorrente cannot be cast to br.com.empresa.banco.conta.ContaPoupanca
:lol: at TestaGuardador.main(TestaGuardador.java:27)
Você está tentando fazer um cast ContaCorrente para ContaPoupança??? [/quote]
Isso mesmo cido18
Mai occoreu um valcilo meu aqui…O Exeption que havia passado é em execução e não em compilação…e pelo que foi passado no exercício iria ocorrer mesmo, mais aproveitando o tópico gostaria de saber se possível o porque de ter acontecer esse Exeption em execução?
Então, o problema é que as duas classes não tem nada em comum(não fazem parte da hierarquia de herança), acredito que tenha uma classe pai chamada conta não??? tenta trocar a conta poupança por conta, só para ver o resultado.
public abstract class Animal{}
public class Cachorro extends Animal{}
public class Gato extends Animal{}
Você não conseguirá transformar um gato em um cachorro, então o cast dará erro. Gato não é um cachorro e nunca conseguirá ser um. Pode latir o quanto quiser,mas sempre será um gato.