3. Vamos imaginar o funcionamento do sistema acadêmico do
Unipê, que controla o cadastro de alunos, professores e
funcionários.
Herança 4
4. Vamos imaginar o funcionamento de um sistema acadêmico do Unipê,
que controla o cadastro de alunos, professores e funcionários
Herança 5
5. Conceito
• Imagine se um dia precisarmos adicionar uma nova
informação(CPF, por exemplo), para todas as Pessoas do
controle acadêmico?
• Precisaríamos ir de classe em classe adicionando a
informação do CPF.
Herança 6
6. Conceito
• Ao modelar um conjunto de classes, podemos encontrar
classes semelhantes na estrutura e no comportamento.
• Existe uma maneira, em Java, de relacionarmos uma classe
de tal maneira que uma delas herda tudo que a outra tem.
Herança 7
7. Então, como implementar?
•A ideia central de herança é que novas classes são
criadas a partir de classes já existentes.
• Subclasse herda de uma Superclasse
• Subclasse é mais específica que a Superclasse
•Herança é uma técnica para prover suporte a
especialização
• Classes mais abaixo: especializadas
• Classes mais acima: genéricas
Herança 8
9. Sobreposição
• Pode-se modificar algum método da minha superclasse?
Sim, através da sobreposição!
• Métodos implementados previamente em uma superclasse podem
ser redefinidos por qualquer subclasse
Herança 10
Para isso, mantém-se a mesma
assinatura do método herdado,
redefinindo apenas o corpo do
método
10. Tipos de Herança
Herança pura
métodos genéricos são sobrepostos
Extensão
novos comportamentos são adicionados nas classes de
especialização (métodos genéricos herdados)
• Por exemplo:
Herança 11
Forma
+desenha()
+apaga()
Quadrado
+desenha()
+apaga()
Circulo
+desenha()
+apaga()
+defineRaio()
Herança
Pura
Extensão
11. Posso herdar de várias Classes?
•Cada subclasse possui uma única superclasse
• A isso, chamamos de herança simples
• Em algumas linguagens, é possível herdar a partir de
diversas superclasses (como em C++)
• Java não permite herança múltipla com classes
Herança 12
12. Recapitulando...
• Se B é uma subclasse de A, então:
• Os objetos de B suportam todas as operações suportadas
pelos objetos de A, exceto aquelas que foram redefinidas
• Os objetos de B incluem todas as variáveis de instância de
B + todas as variáveis de instância de A
• Métodos declarados como private não serão herdados
• Construtores também não são herdados
• Serão chamados (em cascata) na construção de objetos
especializados(super()).
Herança 13
14. Como acessar os atributos que herdamos?
• Se deixarmos os atributos como public, qualquer um poderia alterar
os atributos dos objetos deste tipo.
• Existe um outro modificador de acesso, o protected, que fica entre
o private e o public. Um atributo protected só pode ser acessado
(visível) pela própria classe e por suas subclasses .
Herança 15
18. Exercício 1
A) Seguindo o modelo do exemplo, vamos criar uma classe
chamada Pessoa. Ela deverá ter as características nome,
email, telefone, idade, sexo.
B) Teremos também 3 tipos de pessoas, como: Aluno que terá
ainda Matricula e a Nota. Professor terá como atributos
adicionais seu Salário e Disciplina. E a Secretária terá como
adicional apenas o salário. Crie uma classe para cada um.
C) Por ultimo, vamos criar uma classe para testar cada um dos
atributos.
Herança 19
19. • Vamos supor um sistema de um banco, que controle
seus clientes e suas contas...
Estudo de Caso 2 > Sistema Bancário
20. Conta Poupança
• Cliente
• Número
• DataAbertura
• Saldo
• TaxaRendimento
• Creditar
• Debitar
• CreditarRendimento
Conta Corrente
• Cliente
• Número
• DataAbertura
• Saldo
• TaxaManutencao
• TaxaOperacao
• Creditar
• Debitar
• DebitarManutenção
Sistema Bancário > SisBank
21. Conta Poupança Conta Corrente
Sistema Bancário > SisBank
O que existe de semelhante entre estes
dois?
R: São Contas!
22. Conta Poupança
• Cliente
• Número
• DataAbertura
• Saldo
• TaxaRendimento
Creditar
Debitar
CreditarRendimento
Conta Corrente
• Cliente
• Número
• DataAbertura
• Saldo
• TaxaManutencao
• TaxaOperacao
Creditar
Debitar
DebitarManutenção
Sistema Bancário > SisBank
23. • Com a herança é possível
identificar que as classes
ContaCorrente e
ContaPoupança irão aproveitar
tudo que está na classe Conta!
Implementando Herança
24. •Mas e o Construtor da subclasse, Como
fica?
•Precisamos chamar o construtor da
superclasse!
• Operador: super
Implementando Herança
26. •Detalhe importante:
• A classe Conta pode “existir” no nosso
sistema bancário?
•R: Não, essa é uma classe que apenas reúne
características semelhantes entre
ContaCorrente e ContaPoupanca. A classe
Conta não pode ser instanciada!
SisBank
27. •Como implementar para que a classe Conta não
possa ser instanciada?
•R: Definindo-a como “classe abstrata”!
Classe Abstrata
28. •O que é uma classe Abstrata?
•É uma classe que não pode ser instanciada, ou
seja, não gera objetos;
•É utilizada apenas como superclasse em
hierarquia de heranças;
•Também é conhecida como “superclasse
abstrata”;
•Reúne características semelhantes de classes.
•Operador: abstract
Classe Abstrata
29. • No nosso sistema bancário, o método debitar irá se
comportar de maneira diferente para as
implementações em ContaCorrente e
ContaPoupanca:
• Corrente: ao solicitar para se debitar um valor, deve-se também
debitar o valor da taxa de operação da conta;
• Poupança: ao solicitar para se debitar um valor, deve-se verificar
se a conta já possui mais de um ano de abertura;
SisBank
30. •Como garantir que as classes herdeiras
irão implementar um método?
• R: Métodos abstratos!
• Não possui implementação;
• Toda classe herdeira direta deverá obrigatoriamente
implementar.
• Esse é um conceito do Polimorfismo: o mesmo nome e
assinatura de método podem ser utilizados para realizar
diferentes ações, dependendo da implementação do
método da classe!
Métodos Abstratos
31. Exercício 2
A) Vamos criar uma classe Conta, que possua um saldo, os
métodos para pegar saldo, creditar e debitar
B) Adicione um método na classe Conta, que atualiza essa
conta de acordo com uma taxa percentual fornecida
C) Crie duas subclasses da classe Conta: ContaCorrente e
ContaPoupanca. Ambas terão o método atualiza
sobrescrito: A ContaCorrente deve atualizar-se com o dobro
da taxa e a ContaPoupanca deve atualizar-se com o triplo da
taxa
• D) Além disso, a ContaCorrente deve reescrever o método
creditar, a fim de retirar uma taxa bancária de dez centavos
de cada depósito
32Herança