Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida no Ex. 3 da Aula 4 - Interfaces

Boa noite! Por gentileza, alguém poderia me explicar o que exatamente faz a linha "gerenciador.adiciona(sv)"? Assim como gerenciador.adiciona(cc)? Não quero passar adiante até compreender o porque desta linha...

Muito Obrigado! Everton.

public class TestaGerenciadorDeImpostoDeRenda {

    public static void main(String[] args) {
        GerenciadorDeImpostoDeRenda gerenciador = new GerenciadorDeImpostoDeRenda();

        SeguroDeVida sv = new SeguroDeVida();
        gerenciador.adiciona(sv);

        ContaCorrente cc = new ContaCorrente();
        cc.deposita(1000);
        gerenciador.adiciona(cc);

        System.out.println(gerenciador.getTotal());

    }
}
3 respostas
solução!

Olá Everton!

O método "adiciona" da classe GerenciadorDeImpostoDeRenda recebe como parâmetro um tipo "Tributavel" ( como mostrado abaixo) e simplesmente soma o valor dos tributos que recebe, através da chamada ao método "calculaTributos", incrementando o resultado na propriedade "total":

void adiciona(Tributavel t) { System.out.println("Adicionando tributável: " + t); total += t.calculaTributos(); }

O que temos que lembrar é que "Tributavel" é na verdade é uma interface, ou seja, um contrato ou uma regra que cada classe que a implementa deve seguir. Se olharmos para interface Tributavel veremos que ela "obriga", simplesmente por constar na sua definição, a implementação do método "calculaTributos".

Como as classes "SeguroDeVida" e "ContaCorrente" implementam a interface Tributavel elas obrigatoriamente devem possuir um método chamado "calculaTributos". Então, quando a execução do programa chega nas linhas:

gerenciador.adiciona(sv); e gerenciador.adiciona(cc);

A JVM (Java Virtual Machine), em tempo de execução, reconhece que "sv" é um objeto do tipo SeguroDeVida e que "cc" é um objeto do tipo "ContaCorrente". Portando, a JVM sabe que para o objeto sv deverá ser chamado o método calculaTributos da Classe SeguroDeVida e para o objeto cc deverá ser chamado o método calculaTributos da classe Conta Corrente.

Esse comportamento só é possível por que ambas as classes (ContaCorrente e SeguroDeVida) implementam a interface "Tributavel" e, pelo fato de implementarem essa interface é certo que elas terão o método calculaTributos.

Espero ter ajudado!

Guilherme Amorim, sua resposta foi mega didática! Agora sim, posso prosseguir com o curso! Muito obrigado por ter dedicado seu tempo nesta explicação... Me ajudou muito! :)

Disponha Everton, fico feliz em ter ajudado!