HERANÇA E POLIMORFISMO
Prof. Thiago Pereira Rique
<[email protected]>
http://thiagorique.wordpress.com/
AGENDA
Herança
 Reescrita de método (overriding)
 Invocando o método reescrito
 Polimorfismo

HERANÇA

Vamos modelar a classe funcionário de um banco.
HERANÇA

Em um banco, há também um gerente.
Um gerente guarda as mesmas informações de um
funcionário comum.
 Um gerente possui informações e funcionalidades um
pouco diferentes.

HERANÇA

A classe gerente
HERANÇA
Precisamos mesmo de outra classe?
 Se um dia precisarmos adicionar uma nova
informação
para
todos
os
funcionários,
precisaremos passar por todas as classes de
funcionário e adicionar este atributo.
 Em Java, podemos relacionar duas classes de
modo que uma herda características que a outra
possui.

Classe mãe (superclasse) e classe filha (subclasse)
 No nosso caso, gostaríamos que gerente tivesse o que
funcionário tem (gerente seria uma extensão de
funcionário)

HERANÇA

Herança

Classes de objetos novas são derivadas absorvendo-se
características de classes existentes e adicionando-se
características únicas dessas mesmas classes.
HERANÇA

Classe Gerente estende Funcionario.
HERANÇA

Um Gerente é um Funcionario.
HERANÇA

Classe de teste.
HERANÇA
A subclasse herda todos os membros (atributos e
métodos) da superclasse.
 Membros private não podem ser acessados
diretamente pela subclasse.
 E se precisarmos acessar os atributos que
herdamos?


Modificador de acesso protected

Visível pela classe, subclasses e classes no mesmo pacote.
HERANÇA

Modificador de acesso protected
HERANÇA

Herança simples do Java
REESCRITA DE MÉTODO (OVERRIDING)

Considere a situação

No fim do ano, os funcionários do banco recebem uma
bonificação. Funcionários comuns recebem 10% do
salário e gerentes, 15%.
REESCRITA DE MÉTODO (OVERRIDING)


A classe Gerente
getBonificacao.
vai
herdar
o
método
O resultado será 500, quando deveria ser 750
(trata-se de um gerente).
REESCRITA DE MÉTODO (OVERRIDING)

Em Java, podemos alterar o comportamento de
um método herdado. Podemos reescrever
(sobrescrever, override) este método.
INVOCANDO O MÉTODO REESCRITO

Após reescrito, não podemos mais chamar o
método herdado da superclasse, mas podemos
invocá-lo se estivermos dentro da classe.


Palavra reservada super
Considere a seguinte situação:

Suponha que para calcular a bonificação de um
Gerente fazemos o mesmo cálculo de um Funcionario,
acrescentando R$ 1000.
INVOCANDO O MÉTODO REESCRITO

Poderíamos fazer o seguinte:

Qual o problema com esta abordagem?
INVOCANDO O MÉTODO REESCRITO
Se o getBonificacao de Funcionario mudar,
teremos que modificar o getBonificacao de
Gerente.
 Solução


O getBonificacao de Gerente
getBonificacao de Funcionario.

Palavra reservada super
pode
chamar
o
INVOCANDO O MÉTODO REESCRITO

Solução
POLIMORFISMO

O que guarda uma variável do tipo Funcionario?

Uma referência, nunca um objeto em si.
POLIMORFISMO

Conceito
Polimorfismo é a capacidade de um objeto poder ser
referenciado de várias formas.
 ATENÇÃO: isto não significa que o objeto se
transforma em outro tipo.


E se tentássemos
funcionario.getBonificacao(); ?
 Qual seria o retorno? 500 ou 750?

POLIMORFISMO

Apesar de estarmos nos referindo ao objeto como
um Funcionario, o método invocado será o do
Gerente, pois o objeto é do tipo Gerente.

Logo, o valor retornado será 750.
Para que criar um Gerente e referenciá-lo como
um Funcionario?
 Situação mais comum


Método que
Funcionario.
recebe
um
argumento
do
tipo
POLIMORFISMO

Método que recebe um argumento do tipo
Funcionario.
POLIMORFISMO

Em algum lugar da aplicação (ou no main):
POLIMORFISMO
No
método
registra
da
classe
ControleDeBonificacoes, o método getBonificacao
do argumento é chamado.
 Quando o argumento se tratar de um Gerente, o
método invocado será o reescrito, isto é, será
invocado o método getBonificacao do Gerente.
 Reafirmando:


Não importa como nos referenciamos a um
objeto, o método que será invocado é sempre o
que é dele.
REFERÊNCIA

Apostila caelum-java-objetos-fj11

http://www.caelum.com.br/apostilas/
Download

Herança e Polimorfismo - Thiago Rique