[quote=renzonuccitelli]Vão os exemplos:
[code]public abstract class Conta {
public float dinheiro;
public Conta() {
this.dinheiro = 0;
}
public void inserirDinheiro(float dinheiro){
this.dinheiro+=dinheiro;
}
public void retirarDinheiro(float dinheiro){
this.dinheiro-=dinheiro;
}
public float mostrarDinheiro(){
return this.dinheiro;
}
public abstract void atualizarConta();
}
public class ContaCorrente extends Conta {
private float taxaJuros;
public ContaCorrente(float taxaManutencao) {
super();
this.taxaJuros=taxaManutencao;
}
@Override
public void atualizarConta() {
this.inserirDinheiro(this.mostrarDinheiro()*taxaJuros);
}
}
public class ContaPoupanca extends Conta {
private float taxaManutencao;
public ContaPoupanca(float taxaManutencao) {
super();
this.taxaManutencao=taxaManutencao;
}
@Override
public void atualizarConta() {
this.retirarDinheiro(taxaManutencao);
}
}
public class Banco {
private List listaContas;
public Banco() {
listaContas=new LinkedList<Conta>();
}
public void adicionarContaPoupanca(float depositoInicial){
ContaPoupanca poupanca=new ContaPoupanca((float)0.65);
poupanca.inserirDinheiro(depositoInicial);
listaContas.add(poupanca);
}
public void adicionarContaCorrente(float depositoInicial){
ContaCorrente poupanca=new ContaCorrente((float)15);
poupanca.inserirDinheiro(depositoInicial);
listaContas.add(poupanca);
}
public String imprimirExtratoTodasContas(){
StringBuilder extratos=new StringBuilder();
for(Conta conta: listaContas){
extratos.append(conta.getClass().getName()+"\n");
extratos.append(conta.mostrarDinheiro()+"\n");
}
return extratos.toString();
}
public void atualizarContas(){
for(Conta conta: listaContas){
conta.atualizarConta();
}
}
}
public class BancoTeste {
/**
* @param args
*/
public static void main(String[] args) {
Banco banco=new Banco();
banco.adicionarContaCorrente(25);
banco.adicionarContaPoupanca(32);
banco.adicionarContaCorrente((float) 55.09);
banco.adicionarContaPoupanca((float) 567.98);
System.out.println(banco.imprimirExtratoTodasContas());
banco.atualizarContas();
System.out.println("Atualizando contas...");
System.out.println(banco.imprimirExtratoTodasContas());
}
}
[/code]
No início é normal ter dificuldade com Herança, o que vc tem que ter em mente é o seguinte:
Toda subclasse faz tudo que a superclasse faz, e geralmente, mais algumas coisas. Quando vc achar que um método vai ter que ser implementado de forma diferente em cada uma das subclassses, faça a superclasse abstrata, criando um nome geral para o método a ser implementado (no caso, criei um atualizar conta).
Assim, vc pode ver que se vc kiser criar outro tipo de conta, basta extender a classe Conta e implementar o método atualizar conta como desejar. Assim, vc só precisaria criar outro método adicionar na classe banco, ou criar um método adicionar na Classe banco que levasse uma instancia de banco, ficando ainda mais geral do que eu fiz. Assim, vc poderia criar outras contas sem mexer nas suas classe já criadas.
Assim, o macete que vc tem que ter em mente é: colocar na superclasse os métodos mais gerais que vc vai precisar.
Se achar que precisaram implementar métodos de forma diferente, faça a superclasse abstrato com o método abstrato, deixando assim a implementação para as subclasses.
Espero ter conseguido explicar, apesar de didática não ser o meu forte.[/quote]
Valew Muito obrigado!!! Pelas dicas