Herança x Polimorfismo: dúvida sobre o Overding

3 respostas
C
Oi pessoALL,





Estou começando a aprender o conceito de Herança, Polimorfismo, etc


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)





public class Pai {


     public void imprime (){


             System.out.println ("Pai");


     }


public class Filho extends Pai {


      public void imprimeIdade (int i) {


              System.out.println (i);


      }


}


public class Exec {


       public static void main (String [] args) {


               Pai obj = new filho();


               obj.imprime();


               obj.imprimeIdade(3);





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())








E Como eu faria para que isso desse certo?..





Certa da atenção,


desde  agradeço





Cátia <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pnglight_smile.png?v=9" title=":slight_smile:" class="emoji" alt=":slight_smile:">

3 Respostas

F

Olá,



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.

Ex.:



(Filho) obj).imprimeIdade(10);

C

???..

Continuo sem entender…

H
Quando você colocou


  Pai obj = new Filho();


você criou um objeto da classe Pai, o qual não possui o método imprimeIdade().





Para funcionar, você deveria colocar


  Filho obj = new Filho();





Por herança, ele enxerga o método imprime();





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.





Exemplos de conversões implícitas:





int a = 3;


long b = 5L;





long c = a + b;





a é convertido implicitamente para long.








void xxx(java.util.Date data) { }





java.sql.Date data = new java.sql.Date();


xxx(data);  // data é convertido implicitamente para java.util.Date que


                 //  é ´superior´ a java.sql.Date





O exemplo do Franklin é de conversão explícita:





     ((Filho) obj).imprimeIdade(10);
Criado 20 de março de 2003
Ultima resposta 20 de mar. de 2003
Respostas 3
Participantes 3