Na aula de Herança e Polimorfismo para a T5 Oracle Java - 2023
Fiz o seguinte código:
package bytebankcontaspackage;
public class ContaCorrente extends Conta{
/*public ContaCorrente() {
super(); // referencia a classe Conta padrão , desde que exista.
}*/
private boolean clienteEspecial;
private double limite;
public ContaCorrente(int agencia, int numero, boolean clienteEspecial) {
super(agencia, numero); // referencia ao construtor da classe Conta
this.setClienteEspecial(clienteEspecial);
if (this.clienteEspecial) {
System.out.println("é cliente especial");
super.deposita(getSaldo() + this.limite);
}
}
@Override
public boolean saca(double valor) {
// TODO Auto-generated method stub
double valorASacar = valor + 0.20;
if (this.getClienteEspecial()== true) {
System.out.println("transferencia sem taxa ");
return super.saca(valor);
}
else {
System.out.println("valor do cliente especial - "+ this.getClienteEspecial());
System.out.println("Transferencia com taxa de 0.20");
return super.saca(valorASacar);
}
}
// getters
public boolean getClienteEspecial() {
return this.clienteEspecial;
}
// setters
public void setClienteEspecial(boolean valor) {
this.clienteEspecial = valor;
}
}
A minha dúvida é a seguinte na declaração dos atributos da classe ContaCorrente, como eu poderia modificar o mesmo para não usar o setClienteEspecial() dentro do construtor ? Se eu utilizar protected ainda é uma boa medida ou é mais seguro para o código eu ter criado essa estrutura ? Antes de criar o setClienteEspecial() eu fiz com que o meu atributo ClienteEspecial fosse false ou seja
private boolean clienteEspecial = false;
Mas notei que no construtor da classe ContaCorrente, mesmo quando eu passava o valor de true para a variável , ela continuava com o valor de false, daí eu tive que fazer esse setter, teria outra forma de fazer isso , isso seria um code smell ?
Obrigado