2
respostas

Dúvida Classe Conta / Classe ContaPoupança

Pessoal, boa noite.

Por favor, preciso tirar uma dúvida.

Vejam as classes abaixo. Porque será que no momento que faço o "print" da conta o saldo que é retornado é o da classe conta e não da classe ContaPoupança?

Acontece o seguinte, ao executar a Classe TestaOrdenacao é retornado 0 (zero) no valor do Saldo e não o valor atribuído para cada conta.

O que estou fazendo de errado?

package br.com.empresa.banco.conta;

public abstract class Conta {
    private double saldo;
    private String nome;
    private int agencia;
    private int numero;

    /**
     * 
     * @param x Valor que será depositado
     * @throws ValorInvalidoExpetion Erro retornado caso valor depositado seja inválido
     */

    public Conta(int n, String texto){
        this.numero = n;
        this.nome = texto;
    }

    public void deposita(double x) throws ValorInvalidoExpetion {
        if(x <0){
            throw new ValorInvalidoExpetion();
        }else{
            this.saldo+=x;
        }
    }

    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public int getAgencia() {
        return agencia;
    }
    public void setAgencia(int agencia) {
        this.agencia = agencia;
    }
    public double getSaldo() {
        return saldo;
    }
    public void imprime() {
        System.out.println(nome);
        System.out.println(agencia);
        System.out.println(saldo);
    }

    public void saca(double valor) {
        this.saldo -= valor;
    }

    public abstract void atualiza(double taxa);

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "esse objeto é uma conta com saldo R$" + this.saldo;
    }

    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
        Conta outra = (Conta) obj;
        return this.numero == outra.numero && this.nome.equals(outra.nome);

    }

    public void setNumero(int n){
        this.numero = n;
    }

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

}


package br.com.empresa.banco.conta;

public class ContaPoupanca extends Conta implements Comparable<ContaPoupanca> {

    public ContaPoupanca(int n, String texto) {
        super(n, texto);
        // TODO Auto-generated constructor stub
    }

    private double saldo;

    public void atualiza(double taxa) {
        this.saldo += this.saldo * taxa;
    }

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

    public int compareTo(ContaPoupanca outra){
        if (this.saldo < outra.saldo){
            return -1;
        }

        if (this.saldo > outra.saldo){
            return 1;
        }

        return 0;
    }
}

package br.com.empresa.banco;

import java.util.LinkedList;
import java.util.List;

import br.com.empresa.banco.conta.ContaPoupanca;



public class TestaOrdenacao {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // List<ContaPoupanca> contas = new ArrayList<ContaPoupanca>();
         List<ContaPoupanca> contas = new LinkedList<>();

            ContaPoupanca c1 = new ContaPoupanca(400, "Caio");
            c1.deposita(1500.0);
            contas.add(c1);

            ContaPoupanca c2 = new ContaPoupanca(467, "Adriano");
            c2.deposita(2050.99);
            contas.add(c2);

            ContaPoupanca c3 = new ContaPoupanca(230, "Victor");
            c3.deposita(1070.0);
            contas.add(c3);

            for (ContaPoupanca conta : contas) {
                System.out.println(conta);
            }
      }

}
2 respostas

Boa noite Daniel,

Quando você cria a conta seu construtor não seta o saldo da conta, ele apenas envia o valor pra classe pai pelo super.

Uma dica, depois da declaração da classe escreva sempre os atributos, depois o contrutor e os métodos:

bons estudos! Espero ter ajudado!

Está correto eu usar o "super" para chamar o método deposita da classe conta para que o sado seja atualizado ?

Existe outra forma pra resolver este problema?

public void deposita(double valor) throws ValorInvalidoExpetion {
        this.saldo += valor - 0.10;
        super.deposita(valor);
    }