E aí Igor, acho que agora entendi a sua motivação!
Veja que tanto na classe TestaTributaveis, quanto no CalculadorImposto, não implementamos nada que manipule o saldo como fizemos no método sobrescrito saca()
da ContaCorrente que, de fato, tira o valor de 20 centavos toda vez que ocorre um saque na conta. Portanto, realmente é de se esperar que quando printamos o saldo em TestaTributaveis, nada aconteça, já que não usamos o método saca()
na conta.
@Override
public boolean saca(double valor) {
double valorASacar = valor + 0.2;
return super.saca(valorASacar);
}
Em nosso caso, fazer alterações no CalculadorImposto não é a solução, já que a responsabilidade dessa classe é de registrar serviços - como conta corrente e seguro de vida - e somar seus impostos, nada mais do que isso. Sabendo disso, podemos pensar em uma maneira de cobrar os impostos da ContaCorrente.
Eu recomendo você tentar criar uma solução agora usando um método na ContaCorrente faz o pagamento do imposto. Mas se estiver sem paciência e quiser ver uma possível solução - mas que talvez não seja a melhor - é só continuar lendo! rs
Bom, uma solução mais simples pode ser criar um método na ContaCorrente que faz o pagamento do imposto, chamado pagaImposto()
, por exemplo. Aqui, passamos como parâmetro o CalculadorImposto para que possamos ter acesso ao valor total do imposto que ele calculou, e depois descontamos o valor do imposto em cima do saldo da conta:
public void pagaImposto(CalculadorImposto ci) {
super.saldo -= ci.getTotalImposto();
}
Testando o método na classe TestaTributaveis, temos o seguinte resultado:
Chamando método:
public class TestaTributaveis {
public static void main(String[] args) {
//Código omitido
cc.pagaImposto(ci);
System.out.println(ci.getTotalImposto());
System.out.println(cc.getSaldo());
}
}
Resultado:
43.0
57.0
Veja que agora o valor do imposto foi descontado no saldo! :D
Espero ter ajudado, se ficou qualquer dúvida é só avisar!
Bons estudos!!