[quote=Markinhus86]Pq lança essa exceção java.lang.ClassCastException se um Cat pode fazer tudo q um Animal pode fazer?
…
Animal animal = new Dog();
Cat cat = (Cat)animal;
System.out.println(cat.noise());[/quote]
corroborando com o que o colega acima ja citou…
veja o que esse trecho faz…
ele cria um Dog (um cachorro, que herda de animal)
guarda o Dog em um Animal, ou seja esta usando polimorfismo, para guardar um objeto dog em um supertipo Animal…
depois ele tenta transformar o que esta dentro de “animal”, que é um Dog, em um Cat…
O programa verifica que Dog e Cat não tem relação direta um com o outro, e gera uma exceção, avisando que é impossivel transformar
Um Cachorro em um Gato, mesmo os 2 sendo animais, eles não são possivel de transformação…
[quote=Murl]Me corrijam se estiver errado, pois também estou aprendendo e inclusive estudando para a prova =)
Acho que uma boa maneira de testar se há possibilidade de realizar um cast é fazer um teste instanceof, certo?
O que eu quero dizer…
SE cat IS-A Dog então posso realizar o cast.
Como neste caso (cat instanceof Dog) é falso, o cast não pode ser realizado!
Certo?
Vlws![/quote]
quase isso, quase … existe so um caso que o cast é permitido, mesmo o instanceOf sendo falso, é quando o valor da variável é nulo…
… so que vc não poderá realizar esse teste no exame ^^ …
… mas se passar no teste não falha o cast, porem se não passar e for nulo, o cast é realizado sem lançar exceções … mas o teste tem q ser realizado para o objeto dentro da variável… por exemplo, neste caso “animal instanceOf Cat” é falso, pois o objeto dentro de animal é um Dog …
…
e para verificar como é feito o cast…
[code]public final class Class {
public T cast(Object obj) {
if (obj != null && !isInstance(obj))
throw new ClassCastException();
return (T) obj;
}
}[/code]
como vc ve, ele so testa o instanceof, se o objeto não for nulo…