Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Desafio - Conta Bancária

Olá, tudo bem?

Percebi que quando instanciamos um novo objeto a partir da ContaCorrente, cria-se um novo saldo para essa nova instância. Tentei identificar se havia algum problema no meu código até eu executar o código do professor que também obtive o mesmo comportamento. No caso, está certo esse comportamento? Eu deveria atribuir o valor do saldo do objeto conta no objeto contaCorrente se eu quiser ter os mesmos valores em ambos, certo?

package br.com.alura.screenmatch.exercicios.desafio3;

public class ContaBancaria {

    protected double saldo;

    public double getSaldo() {
        return saldo;
    }

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

    public void consultarSaldo(){
        System.out.println("Seu saldo é de: R$" + getSaldo());
    }

    public void depositar(double valor) {
        setSaldo(getSaldo()+valor);
        System.out.println("Valor depositado! Seu novo saldo é de: R$" + getSaldo());
    }

    public void sacar(double valor) {
        if (valor > getSaldo()){
            System.out.println("Saldo insuficiente! Seu saldo é de: R$ " + getSaldo());
        }else if(valor <= getSaldo()){
            setSaldo(getSaldo()-valor);
            System.out.println("Saque realizado com suceso! Seu saldo atual é de: R$ " + getSaldo());
        }
    }
}

package br.com.alura.screenmatch.exercicios.desafio3;

public class ContaCorrente extends ContaBancaria{

    public void cobrarTarifa(double tarifa){
        setSaldo(getSaldo()-tarifa);
    }

}

package br.com.alura.screenmatch.exercicios.desafio3;

public class TesteContaBancaria {

    public static void main(String[] args) {

        ContaBancaria conta = new ContaBancaria();
        conta.depositar(100000.0);
        conta.sacar(23000.0);
        conta.sacar(23000.0);
        conta.depositar(100.0);
        conta.consultarSaldo();

        ContaCorrente contaCorrente = new ContaCorrente();
        contaCorrente.consultarSaldo();
        contaCorrente.depositar(100.0);
        contaCorrente.cobrarTarifa(7.20);
        contaCorrente.sacar(9000.0);
        contaCorrente.consultarSaldo();


    }
}
1 resposta
solução!

Olá, Jefferson! Tudo bem?

É ótimo ver que você está pensando detalhadamente sobre o comportamento do seu código.

Sim, você está correto. Quando você cria uma nova instância de ContaCorrente, ela é um objeto completamente novo, com seu próprio saldo. Isso acontece porque ContaCorrente é uma subclasse de ContaBancaria, então ela herda todos os métodos e variáveis de ContaBancaria, incluindo a variável saldo. No entanto, cada instância da classe ContaCorrente terá seu próprio saldo independente.

Se você quiser que a ContaCorrente tenha o mesmo saldo que a ContaBancaria quando for instanciada, você precisará passar o saldo da ContaBancaria para a ContaCorrente de alguma forma. Uma maneira de fazer isso seria através do construtor. Aqui está um exemplo de como você poderia fazer isso:

public class ContaCorrente extends ContaBancaria{

    public ContaCorrente(double saldoInicial){
        this.saldo = saldoInicial;
    }

    public void cobrarTarifa(double tarifa){
        setSaldo(getSaldo()-tarifa);
    }

}

E então, ao criar uma nova ContaCorrente, você passaria o saldo da ContaBancaria para o construtor:

ContaCorrente contaCorrente = new ContaCorrente(conta.getSaldo());

Dessa forma, a ContaCorrente iniciará com o mesmo saldo da ContaBancaria.

Lembre-se de que, mesmo fazendo isso, o saldo da ContaCorrente e da ContaBancaria ainda serão independentes um do outro. Ou seja, se você depositar dinheiro na ContaCorrente, o saldo da ContaBancaria não será afetado, e vice-versa.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.