Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Estou tentando colocar um preço para sacar mas o preço não é implementado

o console devolve o mesmo valor de antes de eu colocar. O valor é esse:

CC 90.0 CP 210.0

meus códigos estão assim

Conta:



public class Conta {

    private double saldo;
    private int agencia;
    private int numero;
    private Cliente titular; 
    private static int total;

    public Conta(int agencia, int numero) {    
        Conta.total++;
        //System.out.println("o total de contas e " + Conta.total);
        this.agencia = agencia;
        this.numero = numero;
        //this.saldo = 100;
        //System.out.println("estou criando uma conta " + this.numero);
    }

   public void deposita(double valor) {           
       this.saldo += valor;
    }

    public boolean saca(double valor) {
        if(this.saldo >= valor) {
            this.saldo -= valor;
            return true;
        } else {
            return false;
        }
    }


    public boolean transfere(double valor, Conta destino) {
        if(this.saldo >= valor) {
            this.saldo -= valor;
            destino.deposita(valor);
            return true;
        } 
        return false;

  }

  public double getSaldo() {
      return this.saldo;

  }

  public int getNumero() {
      return this.numero;
  }

  public void setNumero(int numero) {
     if(numero <= 0) {
         System.out.println("nao pode valor <= a zero :(");
         return;
     }
      this.numero = numero;
  }

   public int getAgencia() {
    return this.agencia;
}

   public void setAgencia(int agencia) {
    if(agencia <= 0 ) {
        System.out.println("nao pode valor menor ou igual a zero :(");
        return;
    }
    this.agencia = agencia;
   }


   public void setTitular(Cliente titular) { 
       this.titular = titular; 

   }

   public Cliente getTitular() {
    return titular;
   }

   public static int getTotal() {
    return Conta.total;
}


}     

contaCorrente:



//new ContaCorrente()
public class ContaCorrente extends Conta {

     public ContaCorrente(int agencia, int numero) {
         super(agencia, numero);
     }


    @Override
    public boolean saca(double valor) {
        double valorASacar = valor + 0.2;
        return super.saca(valorASacar);
    }
}

contaPoupanca:


public class ContaPoupanca extends Conta {


    public ContaPoupanca(int agencia, int numero) {
        super(agencia, numero);
    }
}

TestaConta:


public class TestaConta {

    public static void main(String[] args) {

        ContaCorrente cc = new ContaCorrente(111, 111);
        cc.deposita(100);

        ContaPoupanca cp = new ContaPoupanca(222, 222);
        cp.deposita(200);

        cc.transfere(10.0, cp);

        System.out.println("CC " +  cc.getSaldo());
        System.out.println("CP " +  cp.getSaldo());
    }

}
2 respostas
solução!

Opa Cauê, tudo tranquilo?

Veja que o método transfere() que você está utilizando é o método da classe mãe, se dermos uma olhada na implementação dele vemos que não há sinal do método saca(), portanto independente da alteração que você faça no método, ela não mudará nada no transfere().

public boolean transfere(double valor, Conta destino) {
    if(this.saldo >= valor) {
        this.saldo -= valor;
        destino.deposita(valor);
        return true;
    } 
    return false;
}

Uma forma de se resolver isso, seria colocando o saca() dentro do transfere, aproveitando que uma parte do próprio método transfere() faz a mesma coisa que o método saca().

public boolean transfere(double valor, Conta destino) {
    if(saca(valor)) {
        destino.deposita(valor);
        return true;
    } 
    return false;
}

Veja que dessa forma, quando formos transferir um valor, dentro do próprio método transfere(), será chamado o método saca() com a taxa extra que você implementou!

Espero ter ajudado. Se ficou alguma dúvida é só avisar!

Bons estudos!!

Obrigado estava aqui a um tempão e não tinha conseguido mas agora consegui!