27
HERANÇA E POLIMORFISMO Prof. Thiago Pereira Rique <[email protected]> http://thiagorique.wordpress.com/

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

Embed Size (px)

Citation preview

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

HERANÇA E POLIMORFISMO

Prof. Thiago Pereira Rique

<[email protected]>

http://thiagorique.wordpress.com/

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

AGENDA

Herança Reescrita de método (overriding) Invocando o método reescrito Polimorfismo

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

HERANÇA

Vamos modelar a classe funcionário de um banco.

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

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.

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

HERANÇA

A classe gerente

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

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)

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

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.

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

HERANÇA

Classe Gerente estende Funcionario.

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

HERANÇA

Um Gerente é um Funcionario.

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

HERANÇA

Classe de teste.

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

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.

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

HERANÇA

Modificador de acesso protected

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

HERANÇA

Herança simples do Java

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

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%.

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

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).

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

REESCRITA DE MÉTODO (OVERRIDING)

Em Java, podemos alterar o comportamento de um método herdado. Podemos reescrever (sobrescrever, override) este método.

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

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.

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

INVOCANDO O MÉTODO REESCRITO

Poderíamos fazer o seguinte:

Qual o problema com esta abordagem?

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

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

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

INVOCANDO O MÉTODO REESCRITO

Solução

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

POLIMORFISMO

O que guarda uma variável do tipo Funcionario? Uma referência, nunca um objeto em si.

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

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?

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

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.

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

POLIMORFISMO

Método que recebe um argumento do tipo Funcionario.

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

POLIMORFISMO

Em algum lugar da aplicação (ou no main):

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

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.

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

REFERÊNCIA

Apostila caelum-java-objetos-fj11 http://www.caelum.com.br/apostilas/