Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Acessar o total do imposto sem ser pela conta instanciada

Boa noite pessoal. Fiz a implementação dos tributáveis antes de ver a solução do professor, daí o meu código ficou um pouco diferente, por exemplo: Coloquei o imposto de 1% para todos. Porém do jeito que está, para visualizar o total do imposto recolhido, tenho que fazer isto a partir de um objeto instanciado. segue o código:


public interface Tributavel {
    double getValorImposto();
}


public class CalculadorImposto {

    private static double totalImposto;

    public double getValorImposto(double valorACalcular) {
        double valorDoImposto = valorACalcular*0.01;
        totalImposto+=valorDoImposto;
        return valorDoImposto;

    }
    public double getTotalImposto() {
        return CalculadorImposto.totalImposto;
    }

}

public class ContaCorrente extends Conta implements Tributavel{
    CalculadorImposto calculador;
    public ContaCorrente(int agencia, int numero) {
        super(agencia, numero);
        calculador = new CalculadorImposto();

    }

    @Override
    public boolean saca(double valor) {
        double valorASacar = valor + .2;
        return super.saca(valorASacar);
    }

    @Override
    public void deposita(double valor) {
        super.saldo += valor;

    }

    @Override
    public double getValorImposto() {
        return this.calculador.getValorImposto(super.saldo);
    }
}

public class SeguroDeVida implements Tributavel {
    CalculadorImposto calculador;

    public SeguroDeVida() {
        calculador = new CalculadorImposto();
    }

    private double valorDoSeguro;

    public void setValorDoSeguro(double valorDoSeguro) {
        this.valorDoSeguro = valorDoSeguro;
    }

    public double getValorDoSeguro() {
        return valorDoSeguro;
    }

    @Override
    public double getValorImposto() {
        return calculador.getValorImposto(valorDoSeguro);
    }

}


public class AcaoBolsa implements Tributavel {
    CalculadorImposto calculador;
    public AcaoBolsa() {
        calculador = new CalculadorImposto();
    }

    private double saldoDaAcao;

    public void setSaldoDaAcao(double saldoDaAcao) {
        this.saldoDaAcao = saldoDaAcao;
    }

    public double getSaldoDaAcao() {
        return this.saldoDaAcao;
    }


    @Override
    public double getValorImposto() {
        return calculador.getValorImposto(saldoDaAcao);
    }

}

public class TestaConta {
    public static void main(String[] args) {

        ContaCorrente contaDoJoao = new ContaCorrente(2902, 258850);
        contaDoJoao.deposita(500);
        System.out.println("Saldo da conta do joão: " + contaDoJoao.getSaldo());
        System.out.println("Valor do imposto da conta do joao: "+ contaDoJoao.getValorImposto());

        AcaoBolsa acaoDoNenem = new AcaoBolsa();

        acaoDoNenem.setSaldoDaAcao(450000);

        System.out.println("Acao do neném: " + acaoDoNenem.getSaldoDaAcao());
        System.out.println("Imposto da acao do neném: " + acaoDoNenem.getValorImposto());


        SeguroDeVida seguroDaKatrine = new SeguroDeVida();

        seguroDaKatrine.setValorDoSeguro(980000);
        System.out.println("Valor do seguro: " + seguroDaKatrine.getValorDoSeguro());
        System.out.println("Valor do imposto do seguro: " + seguroDaKatrine.getValorImposto());

        System.out.println("Valor total do imposto: " + seguroDaKatrine.calculador.getTotalImposto());

Como visto, tive que acessar o valor total do imposto a partir do seguroDaKatrine. Há alguma forma de acessar o total sem fazer isto?

1 resposta
solução!

Acho que a forma mais rápida de fazer isso considerando a forma que ficou seu código seria criar um objeto do tipo CalculadorImposto na classe TestaConta e usar o método getTotalImposto, dessa forma:

public class TestaConta {
    public static void main(String[] args) {

        CalculadorImposto calculadorImposto = new CalculadorImposto();

        ContaCorrente contaDoJoao = new ContaCorrente(2902, 258850);
        contaDoJoao.deposita(500);
        System.out.println("Saldo da conta do joão: " + contaDoJoao.getSaldo());
        System.out.println("Valor do imposto da conta do joao: " + contaDoJoao.getValorImposto());

        AcaoBolsa acaoDoNenem = new AcaoBolsa();

        acaoDoNenem.setSaldoDaAcao(450000);

        System.out.println("Acao do neném: " + acaoDoNenem.getSaldoDaAcao());
        System.out.println("Imposto da acao do neném: " + acaoDoNenem.getValorImposto());


        SeguroDeVida seguroDaKatrine = new SeguroDeVida();

        seguroDaKatrine.setValorDoSeguro(980000);
        System.out.println("Valor do seguro: " + seguroDaKatrine.getValorDoSeguro());
        System.out.println("Valor do imposto do seguro: " + seguroDaKatrine.getValorImposto());

        System.out.println("Valor total do imposto: " + calculadorImposto.getTotalImposto());
    }
}