Na atividade do desafio do pacote java-aplicando-orientacao-objetos, topico 3 reaproveitando caracteristica e comportamento , surgiu um incomodo nessa atividade :
Crie uma classe ContaBancaria com métodos para realizar operações bancárias como depositar(), sacar() e consultarSaldo(). Em seguida, crie uma subclasse ContaCorrente que herda da classe ContaBancaria. Adicione um método específico para a subclasse, como cobrarTarifaMensal(), que desconta uma tarifa mensal da conta corrente.
pois o sistema fica vulneravel , porque a pessoal pode alterar diretamente a varialvel do saldo da contaBancaria ao criar um objeto da conta corrente que herda o saldo da conta bancario entendi. Eu gostaria de alterar esse saldo só apenas com o metódo do deposito .
isso que acontece :
public class TestaContaBancaria {
public static void main(String[] args) {
ContaCorrente contaCorrente1 = new ContaCorrente();
contaCorrente1.consultarSaldo();
contaCorrente1.deposita(5000);
contaCorrente1.deposita(5000);
contaCorrente1.saque(5000);
contaCorrente1.cobrarTarifaMensal();
contaCorrente1.consultarSaldo();
contaCorrente1.consultarSaldo();
contaCorrente1.valorDaConta = 100;
}
}
public class ContaBancaria {
protected double valorDaConta ;
void deposita(double dinheiro) {
this.valorDaConta += dinheiro;
System.out.println("Deposito realizado com sucesso, saldo atual: " + valorDaConta);
}
void saque(double dinheiro) {
if (dinheiro <= valorDaConta) {
this.valorDaConta -= dinheiro;
System.out.println("Saque realizado com sucesso" + valorDaConta);
}
if (dinheiro > valorDaConta) {
System.out.println("Saldo insuficiente para saque, saldo atual " + valorDaConta );
}
}
void consultarSaldo() {
System.out.println("saldo atual " + valorDaConta);
}
}
public class ContaCorrente extends ContaBancaria{
private double tarifaMensalCorrente = 0.1;
void cobrarTarifaMensal(){
valorDaConta -= tarifaMensalCorrente;
System.out.println("Tarifa " + tarifaMensalCorrente + "cobrada, saldo atual " + valorDaConta);
}
}
-> contaCorrente1.valorDaConta = 100; <- Eu não quero que isso aconteça , o valor entre apenas pelo metodo deposita, entendes ?
Obs: Entendo que ao fazer isso , surgi o novo saldo *
quando coloco o private na variavel ValorDaConta na ContaBancaria na minha ContaCorrente não consigo criar o metodo da tarifa , pois lá eu precisaria desse saldo para descontar e ter o saldo atual , quando coloco o protect entra no mesmo disconforto disso: -> contaCorrente1.valorDaConta = 100; <- Eu não quero que isso aconteça , o valor entre apenas pelo metodo deposita, entendes ?