Baixe o app para aproveitar ainda mais
Prévia do material em texto
Polimorfismo Polimorfismo “É o meio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem executar métodos que têm a mesma assinatura.” Sun Certified Java Associate (SCJA) Marcelo Castellani Polimorfismo • Porém esses métodos possuem execução diferente, dependendo de sua aplicação em cada classe onde fora definido. Exemplo • Classe abstrata chamada Carro • Com o método velocidadeNaCurva • Esse método retorna qual a velocidade de um carro no momento de efetuar uma curva • Programamos essa classe abstrata nas classes Ferrari e Fusca. Usando polimorfismo, definimos o mesmo método para as duas classes e obtemos diferentes valores Operador instanceOf • O tipo específico de um objeto pode ser determinado utilizando-se o operador instanceOf – <varobjeto> instanceOf <classe> – Retorna um valor booleano • É útil quando se necessita selecionar um método específico a ser executado baseado no tipo do objeto. Operador instanceOf • Exemplo: public void operacao(Conta c){ ... if (c instanceOf ContaSuper){ ((ContaSuper c).aumentaLimite(100); } ... } – Conta é superclasse de ContaSuper – Note que a conversão (cast) explícito é necessário, pois aumentaLimite() é um método de ContaSuper e não de Conta! Modificador final • Uma variável ou atributo pode ser marcado como final para se tornar uma constante final double PI = 3.14; • Um método pode ser marcado como final para impedir que seja sobrescrito. public final void meuMetodo(){} • Uma classe pode ser marcada como final para impedir que possa ser estendida com subclasses. public final class Color{} Classes Abstratas “ Uma classe abstrata é uma classe incompleta onde alguns ou todos os seus métodos não possuem implementação,servindo apenas para definir uma interface(Contrato).” Classes Abstratas • Classes abstratas são classes que não podem ser instanciadas • São utilizadas apenas para permitir a derivação de novas classes Classes Abstratas • Identificamos uma classe como abstrata pelo modificador abstract – Um método definido como abstract indica que a classe não implementa aquele método e que ele deve obrigatoriamente ser implementado nas classes derivadas – Todos os métodos não definidos de uma classe abstrata deverão ser definidos nas derivadas ou estas continuarão a ser consideradas abstratas e não poderão ser implementadas. – Em uma classe abstrata um ou mais métodos são declarados, mas não implementados. Exemplo public abstract class Animal { private String tipo; public abstract void sound(); // Método abstrato public Animal (String tipo) { tipo = new String(tipo); } } Classes Abstratas • Como o método sound( ) desenvolvido na classe Animal não possui nenhuma instrução, deve ser declarado como abstract (para que não fique sem sentido). • Este tipo de situação (criar uma superclasse a partir da qual subclasses serão derivadas) acontece muito freqüentemente em programação orientada a objetos, quando o objetivo é apenas tirar vantagem do polimorfismo. • A característica do polimorfismo é garantir que o objeto sabe como deve reagir a uma dada mensagem, independente do tipo de referência usada para acessá- lo. Classes Abstratas Classes Abstratas public class Animal{ private String nome; public Animal(String n) { nome = n; } public void imp() { System.out.println("Nome: "+nome); } public String getName() { return(nome); } public void talk() { System.out.println("Eu nao falo"); } } Classes Abstratas • Classe Animal – Na prática, nunca iremos instanciar um Animal. A classe serve apenas para a definição de mamíferos e pássaros. – Da mesma forma, não instanciamos Mamifero nem Passaro. – Somente instanciamos objetos BemTevi, Papagaio, Cachorro e Vaca. – Logo, Animal, Mamifero e Passaro são classes abstratas Classes Abstratas public abstract class Animal{ private String nome; public Animal(String n) { nome = n; } public void imp() { System.out.println("Nome: "+nome); } public String getName() { return(nome); } public abstract void talk(); // talk não foi implementado nesta classe } Classes Abstratas public abstract class Passaro extends Animal{ public Passaro(String n) { super(n); } public void talk() { System.out.println("Piu piu"); } } public abstract class Mamifero extends Animal{ public Mamifero(String n) { super(n); } public abstract void talk(); //talk não foi implementado } Exercício pesquisa • Enviar para o email do professor • Nome completo do Aluno Exercícios • 1) “O polimorfismo é proporcionado pela • vinculação dinâmica de mensagens a definições • de métodos” Verdadeiro ou Falso ? • 2) Como o polimorfismo e a vinculação dinâmica • facilitam a extensão dos sistemas ? Deitel 405 • [454] e Sebesta 421 • 3) O que é um método final ? Deitel 406 [455] • 4) Quais as vantagens do polimorfismo para o • programador ? Deitel 407 [456] continuação 5. O conceito-chave polimorfismo é um fenômeno pelo qual: a) elementos mais específicos incorporam a estrutura e o comportamento de elementos mais gerais. b) dois ou mais objetos podem responder à mesma mensagem de maneiras diferentes. c) são ocultados os dados, a estrutura e os detalhes de implementação de um objeto. d) uma entidade é diferenciada de todos os outros tipos. e) um objeto aloca espaço e permanece acessível na memória do computador. continuação • Escreva um código utilizando os princípios do polimorfismo. Esse código deve ser executado sem erros de compilação e execução.
Compartilhar