Cast

seguinte tenho essas duas classes.

public class Pai {
//faz algo
}

public class Filho extends Pai {
//faz algo
}

public static void main(String[] args) {
Filho t = (Filho) new Pai();
// t.algumMetodo();
}

Quando eu faço esse polimorfismo com o “t” em tempo de compilação não ocorre erro algum…
mas na hora da execução da a seguinte mensagem.

“Exception in thread “main” java.lang.ClassCastException: padrao.Pai cannot be cast to padrao.Filho
at padrao.Filho.main(Filho.java:22)”

Alguém sabe me explicar o que pode ser?

Obrigado.

depois que eu postei que vi que tem o “[ code ]” mas espero que de pra entender
:slight_smile:

rapa, veeja só…

A classe Pai é a superclasse e a classe Filho é a subclasse

Então, vc ta querendo que a SUPER entre na SUB… A Super é maismais e a Sub é menor…
Em tempo de compilação nao da erro pq nao tem erro de sintaxe… agora em execução da erro, pq ele sabe q ñ pode fazer issoo.

Em outras palavas, nao dá p colocar a roda grande dentro da roda pequena!!!

Abraços

O cast deve ser feito da classe filha para a pai

Pai p = new Filha();

e não o contrário,

a classe pai pode não possuir os comportamentos e atributos da filha e por isso o cast nesta direção dispara uma excessão.

Pois é mais o Pai não é um Filho… não existe essa hierarquia:

Pai extends Filho

Seu código teria que ser assim

public class Pai {
//faz algo
}

public class Filho extends Pai {
//faz algo
}


public static void main(String[] args) {
Pai t = new Filho();
// t.algumMetodo();
}

Sua idéia de polimorfismo e herança está ao contrário…

O Filho é um Pai
Mas o Pai não é um filho

[b] Hmmmmm entendi agora.

tava confundindo.

vlw ai. [/b]

Sempre leia da direita pra esquerda pra saber se está certo:

Filho f = new Pai();

“Pai é um filho?” - não, portanto não compila.

Pai p = new Filho();

“Filho é um Pai?” - sim, então compila!

O cast obriga o compilador confiar no seu código quando as classes envolvidas estão na mesma arvore de herança, mas em tempo de execução vai dar erro.