Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Quero entender mais sobre Polimorfismo

Boa tarde pessoal, estou com uma certa dificuldade para entender o bendito "Polimorfismo". Para mim Polimorfismo é a mesma coisa que Herança. Gostaria de saber se alguém tem algum outro material que eu possa utilizar apenas para entendimento do assunto. Obrigado.

3 respostas
solução!

Olá Felipe, blz?

Cara também tive essa pulga atrás da orelha por um bom tempo, mas com o passar do tempo e com vários projetos, consegui entender e aplica-lo.

Vamos lá!

Polimorfismo e a capacidade de um objeto se comportar como outro, sendo assim assumindo vários estados. Por isso do prefixo “poli”.

Existe um excelente material da Caelum para você tá estudando e ganhando mais conhecimento, mas não se preocupe esse assunto de Polimorfismo é bastante complexo e exige bastante treino e com o tempo você vai dominando o assunto.

https://www.caelum.com.br/apostila-java-orientacao-objetos/heranca-reescrita-e-polimorfismo/

Bom dia Felipe, na verdade o Polimorfismo depende da herança. Assim, imagina que temos uma classe Aluno e uma classe Instrutor e os dois tem um nome:

class Aluno {
    private String nome;
    // get e set de nome
}
class Instrutor {
    private String nome;
    // get e set de nome
}

Dai criamos uma classe que gerencia aluno e instrutores, pois dado um aluno ou instrutor(quando digo dado é passado como parâmetro) precisamos imprimir seu nome:

class GerenciaAlunoEIntrutor {

    public void imprimeNomeAluno(Aluno aluno) {
        System.out.println(aluno.getNome());
    }
    public void imprimeNomeInstrutor(Instrutor instrutor) {
        System.out.println(instrutor.getNome());
    }
}

Podemos pensar: Foi necessário repetir o nome nas duas? Então podemos criar uma super classe Pessoa que tenha nome e ambas herdem. Isso é a Herança. Se entrar Diretor, também pode herdar Pessoa. A herança fez com que repetíssemos menos código.

Agora vem outro porém, como faremos para imprimir o nome do Diretor na GerenciaAlunoEIntrutor ? Teríamos que mudar o nome para GerenciaAlunoEIntrutorEDIretor e colocar outro método. Imagina o tamanho dessa classe caso tenhamos outros tipos?

Ai vem o polimorfismo, pois com ele podemos ter o mesmo tipo de referencia para varios objetos diferentes:

Pessoa p1 = new Aluno();
Pessoa p2 = new Intrutor();
Pessoa p3 = new Diretor();

Então porque podemos fazer isso, podemos ter apenas um método em GerenciaAlunoEIntrutor, que recebe pessoa, e sabemos que toda pessoa tem um nome e podemos imprimir:

class GerenciaAlunoEIntrutor {

    public void imprimeNomeAluno(Pessoa pessoa) {
        System.out.println(pessoa.getNome());
    }
}

Fala meu jovem, tudo bom?

Polimorfismo a princípio parece BEEEEEEMM difícil de entender mesmo @_@ . Então toma isso como base principal:

- Com o polimorfismo você pode guardar em um tipo mais genêrico uma referência mais específica! =)

Sacou? Não?! então toma um exemplo:

 Animal a1 = new Cachorro();

Mas e qual o objetivo disso? =OO

Pensa um método ("falar" por exemplo). Cada animal se comunica de uma forma, então este método será declarado em animal e sobrescrito em cada animal específico (cachorro "auau" e etc), nos casos que não houver específico ele se comportará como um animal padrão seguindo o método da classe mãe.

RESUMÃO: Polimorfismo é a capacidade de um objeto poder ser referenciado de várias formas.

Espero que tenha dado uma luz no fim do túnel aê bro!