Herança e Dynamic Binding
Programação 3: Orientação a Objetos e Java
Objeto Conta Especial
Estados de uma Conta Especial
Contas Especiais: Assinatura
class ContaEspecial extends Conta {
void rende_bonus() {}
double bonus() {}
void credito(double valor) {}
ContaEspecial (String num) {}
}
Contas Especiais: Descrição
class ContaEspecial extends Conta {
private double bonus;
void credito(double valor) {
bonus = bonus + (valor * 0.01);
super.credito(valor);
}
void rende_bonus() {
super.credito(bonus);
bonus = 0;
}
double bonus() {return bonus;}
ContaEspecial (String num) {
super (num);
bonus = 0;
}
}
Redefinição de Métodos
Invariância: tipos dos argumentos e resultados da redefinição tem que ser iguais aos tipos da definição
Semântica e Visibilidade dos métodos redefinidos deve ser preservada
Usando Contas Especiais
...
ContaEspecial contae;
contae = new ContaEspecial(¨21.342-7¨);
contae.credito(200.00);
contae.debito(100.00);
contae.rende_bonus();
System.out.print(contae.saldo());
...
Ligações Dinâmicas
...
Conta conta;
conta = new ContaEspecial(¨21.342-7¨);
conta.credito(200.00);
contae.debito(100.00);
((ContaEspecial) conta).rende_bonus();
System.out.print(conta.saldo());
...
Ligações Dinâmicas
Dois métodos com o mesmo nome e tipo:
definição e redefinição, qual usar?
O código é escolhido dinamicamente (em tempo de execução), não estaticamente (em tempo de compilação)
Sérgio Soares(scbs@di.ufpe.br) |