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 já 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:">
Herança x Polimorfismo: dúvida sobre o Overding
C
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