Que código de iniciante sempre tem espaço pra melhoria não há duvidas, o importante é que foi bem sofrido(sim, sofrer é importante) chegar nessa parte e gastar uma semana de estudo pra entender o que tá acontecendo.
pra dar um resumo, eu tentei praticar as técnicas nas contas corrente e poupança, fiz uma interface e uma composição de movimentações, infelizmente eu não consegui deixar de "estender" a conta para essa composição, pra isso eu teria que deixar o saldo dentro dessa composição, e eu não sei se seria uma boa ideia, pra mim o saldo deveria ser da conta e não dos métodos de movimentação
public abstract interface InterfaceDeMovimentacoesEExtratos
{
void deposita(double valor);
boolean saca(double valor);
boolean transfere(double valor, InterfaceDeMovimentacoesEExtratos destino);
}
public class ComposicaoDeMovimentacoesEExtratos extends Conta implements InterfaceDeMovimentacoesEExtratos
{
@Override
public void deposita(double valor)
{
this.saldo += valor;
}
@Override
public boolean saca(double valor)
{
if(getSaldo() >= valor)
{
this.saldo -= valor ;
return true;
}
else
{
return false;
}
}
@Override
public boolean transfere(double valor, InterfaceDeMovimentacoesEExtratos destino)
{
if(this.saca(valor))
{
destino.deposita(valor);
return true;
}
else
{
return false;
}
}
}
Aqui está a classe Conta com código omitido porque tá igual da aula, mostrando apenas o inicio
public abstract class Conta
{
private int agencia;
private int numeroDaConta;
private Cliente titular;
protected double saldo;
public double getSaldo()
{
return this.saldo;
}
As classes das contas corrente e poupança recebem a interface e composição de movimentação.
public class ContaPoupanca extends Conta implements InterfaceDeMovimentacoesEExtratos
{
protected ComposicaoDeMovimentacoesEExtratos movimentacao;
public ContaPoupanca()
{
this.movimentacao = new ComposicaoDeMovimentacoesEExtratos();
}
@Override
public void deposita(double valor)
{
this.movimentacao.deposita(valor);
}
@Override
public boolean saca(double valor)
{
boolean sacou = this.movimentacao.saca(valor);
return sacou;
}
@Override
public boolean transfere(double valor, InterfaceDeMovimentacoesEExtratos destino)
{
boolean transferiu = this.movimentacao.transfere(valor, destino);
return transferiu;
}
@Override
public double getSaldo()
{
this.movimentacao.saldo -= 1.25;
return this.movimentacao.saldo;
}
}
public class ContaCorrente extends Conta implements InterfaceDeMovimentacoesEExtratos
{
protected ComposicaoDeMovimentacoesEExtratos movimentacao;
public ContaCorrente()
{
this.movimentacao = new ComposicaoDeMovimentacoesEExtratos();
}
@Override
public void deposita(double valor)
{
this.movimentacao.deposita(valor);
}
@Override
public boolean saca(double valor)
{
boolean sacou = this.movimentacao.saca(valor);
return sacou;
}
@Override
public boolean transfere(double valor, InterfaceDeMovimentacoesEExtratos destino)
{
boolean transferiu = this.movimentacao.transfere(valor, destino);
return transferiu;
}
@Override
public double getSaldo()
{
this.movimentacao.saldo -= 3.50;
return this.movimentacao.saldo;
}
}
usei o Java 1.8 mesmo, e nem preciso dizer que esse código funcionou na minha maquina =D
E então? o que eu posso ter deixado passar? foi muito errado ter herdado a classe conta dentro da composição de movimentação pra usar o saldo?
Um abraço