Quando vale a pena usar o método Override?
No meu projeto quis adicionar uma taxa para transferências, no valor de 10 reais. Para fazer isso, sobrescrevi o método transfere da classe Conta, para a classe Conta Corrente.
Porém, usando a anotação, a única forma que encontrei para efetuar a taxa de 10 reias e transferir o valor inserido, foi adicionando o método saca.
* Código Comentado * Quando não uso o anotação Override, e apenas sobrescrevo o método "manualmente" consigo alterar a estrutura dele e apenas adicionar o valor de 10 reias.
Em algum momento esse código pode ser problemático? Alguém sabe outra forma em que pode ser executado?
Classe Conta
public class Conta {
private double saldo;
private int agencia;
private int numero;
private Cliente titular;
private static int totalContas;
public Conta(int agencia, int numero) {
if(agencia <= 0) {
System.out.println("A Agência não pode ser menor ou igual a 0");
return;
} this.agencia = agencia;
if (numero <= 0 ) {
System.out.println("O Número não pode ser menor ou igual a 0");
return;
} this.numero = numero;
System.out.println("Conta criada com sucesso!");
Conta.totalContas++;
}
public void deposita(double valor) {
this.saldo += valor;
}
public boolean saca(double valor) {
if(this.saldo >= valor) {
this.saldo -= valor;
return true;
} else {
System.out.println("Saldo insuficiente! Operação não realizada.");
return false;
}
}
public boolean transfere(double valor, Conta destino) {
if(saca(valor)) {
destino.deposita(valor);
return true;
} return false;
}
public double getSaldo() {
return this.saldo;
}
public int getNumero() {
return this.numero;
}
public int getAgencia() {
return this.agencia;
}
public Cliente getTitular() {
return this.titular;
}
public void setTitular(Cliente titular) {
this.titular = titular;
}
public static int getTotalContas() {
return Conta.totalContas;
}
}
Classe Conta Corrente
public class ContaCorrente extends Conta {
public ContaCorrente(int agencia, int numero) {
super(agencia, numero);
}
// public boolean transfere(double valor, Conta destino) {
//
// if(saca(valor + 10)) {
// destino.deposita(valor);
// return true;
// } else {
// return false;
// }
// }
@Override
public boolean transfere(double valor, Conta destino) {
saca(10);
return super.transfere(valor, destino);
}
@Override
public boolean saca(double valor) {
double taxaSaque = valor + 0.20;
return super.saca(taxaSaque);
}
}
Classe TestaConta
public class TestaConta {
public static void main(String[] args) {
ContaCorrente cc = new ContaCorrente(1990, 12345);
cc.deposita(100);
System.out.println("Saldo CC: " + cc.getSaldo());
ContaPoupanca cp = new ContaPoupanca(2020, 54321);
cp.deposita(200);
System.out.println("Saldo CP: " + cp.getSaldo());
cc.transfere(10, cp);
System.out.println("Saldo CC: " + cc.getSaldo());
System.out.println("Saldo CP: " + cp.getSaldo());
}
}