Então, como implementar?
•A ideia central de herança é que novas classes são
criadas a partir de classes já existentes.
•Subclasseherda 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
Representação
Pessoa
-nome
-email
-telefone
-idade
-sexo
Herança 9
Professor
-salario
-disciplina
Aluno
-matricula
-notas
Funcionario
-salario
Em todo momento que criarmos um objeto do tipo
Professor, ou Aluno, ou Funcionário, este objeto
possuirá também os atributos e métodos definidos
na classe Pessoa, pois agora ele é umaPessoa
Sobreposição
•Pode-se modificar algum método da minha superclasse?
Sim, através da sobreposição!
•Métodosimplementadospreviamenteemumasuperclassepodem
serredefinidosporqualquersubclasse
Herança 10
Para isso, mantém-se a mesma
assinatura do método herdado,
redefinindo apenas o corpo do
método
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
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últiplacom classes
Herança 12
Recapitulando...
•Se Bé uma subclasse de A, então:
•Os objetos de Bsuportam todas as operações suportadas
pelos objetos de A, exceto aquelas que foram redefinidas
•Os objetos de Bincluem todas as variáveis de instância de
B+ todas as variáveis de instância de A
•Métodos declarados como privatenã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
Como acessar os atributos que
herdamos?
Herança 14
Como acessar os atributos que herdamos?
•Sedeixarmososatributoscomopublic,qualquerumpoderiaalterar
osatributosdosobjetosdestetipo.
•Existeumoutromodificadordeacesso,oprotected,queficaentre
oprivateeopublic.Umatributoprotectedsópodeseracessado
(visível)pelaprópriaclasseeporsuassubclasses.
Herança 15
Como implementar nosso
primeiro exemplo?
Herança 16
•Vamos supor um sistema de um banco, que controle
seus clientes e suas contas...
Estudo de Caso 2 > Sistema Bancário
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
Conta Poupança Conta Corrente
Sistema Bancário > SisBank
O que existe de semelhante entre estes
dois?
R: São Contas!
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
•Com a herança é possível
identificar que as classes
ContaCorrentee
ContaPoupançairão aproveitar
tudo que está na classe Conta!
Implementando Herança
•Mas e o Construtor da subclasse, Como
fica?
•Precisamos chamar o construtor da
superclasse!
•Operador: super
Implementando Herança
•Detalhe importante:
•A classe Conta pode existir no nosso
sistema bancário?
SisBank
•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
ContaCorrentee ContaPoupanca. A classe
Conta não pode ser instanciada!
SisBank
•Como implementar para que a classe Conta não
possa ser instanciada?
•R: Definindo-a como “classe abstrata”!
Classe Abstrata
•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
•No nosso sistema bancário, o método debitar irá se
comportar de maneira diferente para as
implementações em ContaCorrentee
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
•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