Escolar Documentos
Profissional Documentos
Cultura Documentos
Heranca e Polimorfismo
Heranca e Polimorfismo
POLIMORFISMO
HERANÇA E POLIMORFISMO
Herança
Ligação Dinâmica
A herança é um relacionamento entre classes
Relacionamento do tipo é um
Herança
Herdando o estado:
Todos os objetos da subclasse terão uma cópia das variáveis de
instância declaradas em todas as suas superclasses
Herdando o comportamento:
Todos os métodos de instância da superclasse também são
métodos dos objetos das suas subclasses
Ao enviar uma mensagem para um objeto da subclasse, a busca
por um método começa na subclasse e se estende pelas
superclasses
Herança em Java
Observe que:
O encapsulamento private não impede que uma propriedade
ou método seja herdado; entretanto, o acesso a estes membros é
impedido na subclasse
O nível de acesso protected permite que membros sejam
invisíveis a outras classes, mas sejam visíveis às subclasses e às
classes do mesmo pacote
Java possui uma classe Object que é a raiz da árvore de classes
da linguagem (não tem superclasse)
Java só permite herança simples (apenas uma superclasse)
Herança
Sobrescrita de métodos
Se uma subclasse implementa um método que já exista na
superclasse dizemos que houve uma sobrescrita de método
(override)
Os métodos devem possuir a mesma assinatura
A busca pelo método inicia-se e termina na subclasse
O método sobrescrito pode chamar o método original da superclasse
na sua implementação: super
Neste caso, se a visibilidade o permitir
Não confunda esse conceito com sobrecarga
Herança
Venda
Exemplo de sobrescrita: -data: Date
+getData(): Date Produto
0..n
+addProduto(Produ -preço: real
to) -descriçao: String
+getTotal(): real
+getValor()
+setValor(double)
VendaPrazo VendaVista
-juros: int -desconto: int
+getTotal() +getTotal()
Herança
Implementação de Venda em Java
A referência super aponta para o objeto corrente, mas faz a busca pelo método
getTotal() começar na superclasse de VendaPrazo
Sem o super, a chamada seria recursiva!
Ligação Dinâmica e Herança
p = new Poligono();
...
p = new Triangulo();
...
p = new Retangulo();
Exemplo de uso de Polimorfismo
Área de um arranjo de polígonos (sem polimorfismo):
double areaTotal() {
double areaTotal = 0;
for (int i = 0; i < MAXPOLIG; ++i) {
if (pol[i] instanceof Poligono)
areaTotal +=
pol[i].areaPoligono();
else if (pol[i] instanceof Triangulo
Triangulo)
areaTotal +=
pol[i].areaTriangulo();
continua
Exemplo de uso de Polimorfismo
Legibilidade do código
O mesmo nome para a mesma operação (método) facilita o
aprendizado e melhora a legibilidade
Código de menor tamanho
Código mais claro, enxuto e elegante.
Flexibilidade
Pode-se incluir novas classes sem alterar o código que a
manipulará
O polimorfismo é implementado com o uso
da ligação dinâmica