H ERANÇA E P OLIMORFISMO Prof. Thiago Pereira Rique

Preview:

Citation preview

HERANÇA E POLIMORFISMO

Prof. Thiago Pereira Rique

<thiagorique2011@gmail.com>

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 vai herdar o método getBonificacao.

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 pode chamar o

getBonificacao de Funcionario. Palavra reservada super

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 recebe um argumento do tipo

Funcionario.

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/

Recommended