Você está na página 1de 9

Polimorfismo

Programação Orientada a Objeto (1COP009)


Prof. Bruno Bogaz Zarpelão
Polimorfismo
• Polimorfismo = várias formas;
• Objeto pode ser referenciado de várias formas;
• É um conceito complementar a herança;
• Um mesmo método é implementado de maneiras
diferentes em subclasses diferentes;
• A decisão sobre qual implementação do método será
executada para responder à invocação é realizada em
tempo de execução;
Polimorfismo
• O polimorfismo permite escrever programas que
processam objetos que compartilham a mesma
superclasse em uma hierarquia de classes como se todos
fossem objetos da superclasse.

3
Polimorfismo
• O polimorfismo facilita a implementação de programas
extensíveis.
• Novas classes podem ser adicionadas com pouca
alteração.
• Podemos desenvolver um programa considerando tipos
de objetos que ainda nem existem!

4
Polimorfismo
• Quando objetos são processados polimorficamente, os
métodos são chamados em tempo de execução. A isso
damos o nome de vinculação dinâmica ou vinculação
tardia.
• A coerção (cast) e o operador instanceof são bastante
importantes em códigos que usam polimorfismo.
Polimorfismo
• Vamos construir dois exemplos de polimorfismo em Java:
– Os códigos dos exemplos estão disponíveis no Google
Classroom;

6
Resumo das atribuições permitidas entre
variáveis de superclasse e de subclasse
• Atribuir uma referência de superclasse a uma variável de
superclasse é simples e direto;
• Atribuir uma referência de subclasse a uma variável de
subclasse é simples e direto;
• Atribuir uma referência de subclasse a uma variável de
superclasse é seguro. Essa referência poderá ser usada
apenas para referenciar membros da superclasse;
• Atribuir uma referência de superclasse a uma variável de
subclasse dá erro de compilação. A solução é fazer coerção
(casting).
7
Exercício
• Compare e contraste classes abstratas e interfaces. Por
que você utilizaria uma classe abstrata? Por que você
utilizaria uma interface?
• Como o polimorfismo promove a capacidade de extensão
de um programa?

8
Exercício
Usando interfaces, como você aprendeu nas últimas aulas, é possível especificar comportamentos semelhantes para classes
possivelmente díspares. Governos e empresas em todo o mundo estão cada vez mais preocupados com as pegadas de carbono
(liberações anuais de dióxido de carbono na atmosfera) geradas a partir de edifícios que queimam vários tipos de combustíveis
para aquecimento, veículos que queimam combustíveis para obter energia, etc. Muitos cientistas culpam esses gases do efeito
estufa pelo fenômeno chamado de aquecimento global. Crie três classes: Building, Car e Bycicle. Dê a cada classe alguns
atributos e comportamentos adequados únicos que ela não tem em comum com as outras classes. Escreva uma interface
CarbonFootprint com um método getCarbonFootprint. Faça com que cada uma de suas classes implemente essa
interface para que o método getCarbonFootprint calcule uma pegada de carbono adequada para essa classe (confira
alguns sites que explicam como calcular pegadas de carbono). Escreva uma aplicação que cria objetos de cada uma das três
classes, insere referências a esses objetos em ArrayList<CarbonFootprint>, então itera pelo ArrayList
polimorficamente invocando o método getCarbonFootprint de cada objeto. Para cada objeto, imprima algumas informações
de identificação e a pegada de carbono do objeto.

Você também pode gostar