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

Porque está sendo executado as "syso" de um método sobrescrito?

Estou testando os códigos aprendidos em aula e estou com uma dúvida.

A classe mãe (Conta) possui um método saca o qual apenas retira o valor do saque.

A classe filha (ContaCorrente) possui o método saca (@Override) o qual além do valor do saque retira mais 0,20 centavos.

Eu coloquei o comando System.out.println em ambos os métodos.

Pelo o que eu (acho que) aprendi ... quando vai ser executado o método *saca * o sistema vai executar o método específico (@Override) da classe.

Isto é, quando vai realizar um saque em uma conta corrente o método usado é aquele específico para conta corrente.

Eu realizei um depósito de 500 e um saque de 50. De fato, o saldo após essas operações resulta o esperado : 449.80

O problema é que aparece na tela os dois System.out.println de ambos os métodos.

Console resulta:

Essa syso está na classe FILHA Conta Corrente*

Essa syso está na classe MÃE Conta

Saldo é 449.8

Alguém sabe o porque? A impressão que tenho é que é executado os dois saca

Seguem códigos Arquivo: TesteContas.java

public class TesteContas {

    public static void main(String[] args) {
        Cliente fxs = new Cliente();
        fxs.setNome("Fernando Xavier de Souza");
        fxs.setCpf("xxxxxxxxxxxx");
        fxs.setProfissao("Policial Militar");

        ContaCorrente cc = new ContaCorrente(111,111);
        cc.deposita(500);
        cc.saca(50);

        System.out.println("Saldo é " + cc.getSaldo());

Arquivo: ContaCorrente.java

public class ContaCorrente extends Conta {

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

    @Override
    public boolean saca(double valor) {
        System.out.println("Essa syso está na classe FILHA Conta Corrente");
        double valorASacar=valor+0.20;
        return super.saca(valorASacar);
    }

    @Override
    public void deposita(double valor) {
        super.saldo+=valor;

    }

}

Aquivo: Conta.java

public abstract class Conta {

    protected double saldo;
    private int agencia;
    private int numero;
    private Cliente titular;
    private static int total=0;

    public Conta (int agencia, int numero) {
        Conta.total++;
        this.agencia=agencia;
        this.numero=numero;
    }

    public abstract void deposita(double valor);

    public boolean saca(double valor) {
        System.out.println("Essa syso está na classe MÃE Conta");
        if(this.saldo>=0) {
            this.saldo-=valor;
            return true;
        } else {
            return false;
        }
    }

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

    public int getAgencia() {
        return agencia;
    }

    public void setAgencia(int agencia) {
        this.agencia = agencia;
    }

    public int getNumero() {
        return numero;
    }

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

    public Cliente getTitular() {
        return titular;
    }

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

    public double getSaldo() {
        return saldo;
    }

    public static int getTotal() {
        return total;
    }


}
1 resposta
solução!

Já descobri :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software