| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2003 12:54:00
|
CatiaPJ
Thread.start()
![[Avatar]](/images/avatar/0)
Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline
|
Oi pessoALL,
<BR>
<BR>Estou começando a aprender o conceito de Herança, Polimorfismo, etc...
<BR>Mas pintou uma dúvida sobre o Overding (qdo um método é chamado ele busca na classe original e se ñ encontrar ele busca na classe pai e assim sucessivamente...)
<BR>
<BR>public class Pai {
<BR> public void imprime (){
<BR> System.out.println ("Pai" ;
<BR> }
<BR>public class Filho extends Pai {
<BR> public void imprimeIdade (int i) {
<BR> System.out.println (i);
<BR> }
<BR>}
<BR>public class Exec {
<BR> public static void main (String [] args) {
<BR> Pai obj = new filho();
<BR> obj.imprime();
<BR> obj.imprimeIdade(3);
<BR>
<BR>Se eu compilar dará erro, mas porque se ele vai procurar primeiro na classe filho (certo?) o imprimeIdade é um objeto da classe filho, então porque daria erro se foi declarado o obj (new filho())...
<BR>
<BR>
<BR>E Como eu faria para que isso desse certo?...
<BR>
<BR>Certa da atenção,
<BR>desde já agradeço
<BR>
<BR>Cátia
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2003 13:02:00
|
FranklinPJ
GUJ Ranger
![[Avatar]](/images/avatar/0)
Membro desde: 16/05/2002 00:00:00
Mensagens: 932
Offline
|
Olá,
<BR>
<BR>Pra funcionar vc precisar indicar explicitamente para o interpretador, que vc deseja acessar um método da classe filha. Isto se faz com um Cast.
<BR>Ex.:
<BR>
<BR>(Filho) obj).imprimeIdade(10);
<BR>
|
http://www.portaljava.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2003 15:42:00
|
CatiaPJ
Thread.start()
![[Avatar]](/images/avatar/0)
Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline
|
???...
<BR>Continuo sem entender...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/03/2003 19:38:00
|
hipersoftPJ
JavaEvangelist
![[Avatar]](/images/avatar/1)
Membro desde: 07/03/2003 00:00:00
Mensagens: 369
Offline
|
Quando você colocou
<BR> Pai obj = new Filho();
<BR>você criou um objeto da classe Pai, o qual não possui o método imprimeIdade().
<BR>
<BR>Para funcionar, você deveria colocar
<BR> Filho obj = new Filho();
<BR>
<BR>Por herança, ele enxerga o método imprime();
<BR>
<BR>A solução do Franklin também é correta. Java possui conversões de tipo implícitas e forçadas. As conversões forçadas exigem o uso do operador cast, que é simbolizado por um par de parenteses em torno do tipo que se quer obter.
<BR>
<BR>Exemplos de conversões implícitas:
<BR>
<BR>int a = 3;
<BR>long b = 5L;
<BR>
<BR>long c = a + b;
<BR>
<BR>a é convertido implicitamente para long.
<BR>
<BR>
<BR>void xxx(java.util.Date data) { }
<BR>...
<BR>java.sql.Date data = new java.sql.Date(...);
<BR>xxx(data); // data é convertido implicitamente para java.util.Date que
<BR> // é ´superior´ a java.sql.Date
<BR>
<BR>O exemplo do Franklin é de conversão explícita:
<BR>
<BR> ((Filho) obj).imprimeIdade(10);
<BR>
<BR>
|
|
|
 |
|
|