Herança x Polimorfismo: dúvida sobre o Overding  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
CatiaPJ
Thread.start()
[Avatar]

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
[WWW] aim icon [ICQ]
FranklinPJ
GUJ Ranger
[Avatar]

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
[WWW] aim icon [ICQ]
CatiaPJ
Thread.start()
[Avatar]

Membro desde: 18/02/2003 00:00:00
Mensagens: 37
Offline

???... <BR>Continuo sem entender...
[WWW] aim icon [ICQ]
hipersoftPJ
JavaEvangelist
[Avatar]

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>
[WWW] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team