1
resposta

[Dúvida] Dúvida sobre o polimorfismo

Para explica minha dúvida vou usar alguns exemplos da aula.

na linha Funcionario ff = new Gerente();

Se eu tentar pegar algum método especifico do Gerente através da variável ff o compilador vai dar erro, e se eu tentar pega algum metodo que existe na classe Funcionario e também existe na classe gerente o compilador vai executar o método da classe Funcionario.

então por exemplo se eu fizer ff.getBonificacao

o java vai executar o método que seja da classe Funcionario e não dá classe Gerente. Sendo assim porque nessa imagem o java consegue entender que eu quero usar o método especifico do objeto que eu passei? ele não consegue apenas saber os métodos do tipo da variável? qual a diferença disso para o outro exemplo que dei acima?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

se eu tentar pega algum metodo que existe na classe Funcionario e também existe na classe gerente o compilador vai executar o método da classe Funcionario.

Na verdade, a "mágica" do polimorfismo no exemplo que você falou: Funcionario ff = new Gerente(); é que mesmo a variável sendo do tipo Funcionário, mas como ela é uma instancia da classe Gerente ela vai rodar de o método da classe Gerente. Joguei um exemplo de código para te ajudar.

class Funcionario {

    public void quemEuSou(){
        System.out.println("Funcionario");
    }
}

class Gerente extends Funcionario {

    @Override
    public void quemEuSou(){
        System.out.println("Gerente");
    }
}
public class Polimorfismo {

    public static void main(String[] args) {
        Funcionario ff = new Gerente();

        ff.quemEuSou();
    }
}