[OCPJP6] 012 – Orientação a objetos

Polimorfismo

Para iniciar a sessão de orientação a objetos, uma das coisas mais belas na orientação a objetos, o polimorfismo.

É importante termos conhecimento do que é herança em orientação a objetos. Resumidamente herança é a forma de compartilhar atributos e métodos de uma classe base (generalização) para suas classes derivadas (especializações).

O polimorfismo é uma forma de “assinar” algo de modo geral (generalização), ou seja, sem se preocupar com as especialidades de cada especialização. Confuso? Vamos ver em código 🙂

Em um exemplo simples… tudo começa assim…

-Object
    '- SerVivo
        '- Animal
            '- Cachorro
            '- Lagarto
        '- Humano
            '- Homem
            '- Mulher

SerVivo é a classe base (generalização) e os demais são as derivadas (especializações).

package certificacao;
public abstract class SerVivo {
    public abstract String locomover();
}
package certificacao;
public abstract class Animal extends SerVivo { }
package certificacao;
public class Cachorro extends Animal {
    @Override
    public String locomover() { return "pulando"; }
}
package certificacao;
public class Lagarto extends Animal {
    @Override
    public String locomover() { return "se arrastando"; }
}
package certificacao;
public abstract class Humano extends SerVivo {
    @Override
    public String locomover() { return "caminhando"; }
}
package certificacao;
public class Homem extends Humano { }
package certificacao;
public class Mulher extends Humano { }

Executando

package certificacao;
import java.util.ArrayList;
import java.util.List;

public class PolimorfismoMain {
    public static void main(String[] args) {
        List<SerVivo> seresVivos = criaSeresVivos();
        // POLIMORFISMO: Para este código,
        // Não importa o que o método locomover faz em cada especialização
        // =D
        for (SerVivo serVivo : seresVivos) {
            System.out.println(serVivo.getClass().getName()
                + " | " + serVivo.locomover());
        }
    }
    public static List<SerVivo> criaSeresVivos() {
        List<SerVivo> seresVivos = new ArrayList<SerVivo>();
        // cachorro
        SerVivo cachorro = new Cachorro();
        seresVivos.add(cachorro);
        // lagarto
        SerVivo lagarto = new Lagarto();
        seresVivos.add(lagarto);
        // mulher
        SerVivo mulher = new Mulher();
        seresVivos.add(mulher);
        // homem
        SerVivo homem = new Homem();
        seresVivos.add(homem);
        return seresVivos;
    }
}

Console

certificacao.Cachorro | pulando
certificacao.Lagarto | se arrastando
certificacao.Mulher | caminhando
certificacao.Homem | caminhando

Em código, você deve pensar que não precisa se preocupar como o homem ou o cachorro vão se locomover, deixe que a especialização faça seu papel em execução =). O polimorfismo simplifica a implementação de uma funcionalidade de execução (Serviço) 😉

Em breve outras características de herança em Java: sobrescrita e sobrecarga.

Comentem, estendam o assunto… Compartilhem =)

Anúncios

3 comentários sobre “[OCPJP6] 012 – Orientação a objetos

  1. MARLLON CRISTIAN ALVES (727) 19 de março de 2015 / 20:00

    Muito legal o post, meu amigo!

    Concordo e assino em baixo quando você diz “uma das coisas mais belas na orientação a objetos, o polimorfismo”.

    Acredito que entender as características da Orientação a Objeto nos ajuda a escrever e compreender códigos com mais facilidade.

    Obrigado por compartilhar,
    Aguardo novos posts!

    Abração!

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s