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;
}
}