5
respostas

Polimorfismo

Aluleiros, aprendi que quando se trata de polimorfismo o java sempre utiliza a classe mais específica. Na saído do programa foi impresso pai. Gostaria de saber porque foi utilizado o metodo getNome do pai e não do Filho, sendo a Classe filho na ocasião é a classe mais específica.

public class Filha  extends Pai{    

    public static String getNome() {

        return "filha";
    }

}
public class Pai {

    public static String getNome() {

        return "Pai";
    }

}
public class ExecutaPai {

    public static void main(String[] args) throws Exception {        


        Pai pai = new Pai();

        Pai filho = new Filha();        


        System.out.println(filho.getNome());            

}



}
5 respostas

Olá Luciano!

Como os métodos possuem a mesma assinatura é necessário sobrescrever o método. Fazemos isso com a anotação @Override:

@Override
public static String getNome() {
    return "filha";
}

Quando adiciono @Override o eclipse aponta erro.

Acho que o problema está no static. Tenta tirar ele pra ver se funciona.

Olá Luciano!

Conseguiu resolver o problema?

Então métodos estáticos não são herdáveis nem sobrescritos. Mas são acessíveis pelas classes filhas, do mesmo modo que qualquer outro outro método não private ou final. Mas isso não tem haver com herança e sim com acessibilidade e polimorfismo estático.

Se uma classe filha redefine um método estático da classe pai, ele na verdade está escondendo o acesso ao método da classe pai, isto se chama sobreamento (Shadowing). Sendo assim, a redefinição só acontece para métodos estáticos e as sobrescrita para métodos herdados.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software