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

Print de saida estranha.

Fiz o exercicio como proposto, mas nao entendi a saida:
Adicionando tributavel: SeguroDeVida@15db9742 //por que saiu desse jeito?
Adicionando tributavel: ContaCorrente@6d06d69c //aqui também
52.0

public abstract class Conta {

    protected double saldo;

    public double getSaldo() {
        return this.saldo;
    }

    public void deposita(double valor) {
        this.saldo += valor;
    }

    public void saca(double valor) {
        this.saldo -= valor;
    }

    public abstract void atualiza(double taxa);

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

}

public class ContaCorrente extends Conta implements Tributavel {

    public void atualiza(double taxa) {
        this.saldo += this.saldo * taxa * 2;
    }

    public double calculaTributos() {
        return this.getSaldo() * 0.01;
    }

}


public class SeguroDeVida implements Tributavel {

    public double calculaTributos() {
        return 42;
    }

}


public class GerenciadorDeImpostoDeRenda {

    private double total;

    void adiciona(Tributavel t) {
        System.out.println("Adicionando tributavel: " + t);

        this.total +=  t.calculaTributos();
    }

    public double getTotal() {
        return this.total;
    }
}


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());

    }
}
11 respostas

Olá Andre, teve uma dúvida bem parecida com essa uma dia desses, da uma olhadinha nesse tópico aqui:

https://cursos.alura.com.br/forum/topico-data-exibida-de-forma-zuada-21923

;)

Isso eu percebi antes de postar a duvida, so que no código como nao tem de onde eu referenciar um atributo, tanto q ta escrito desta forma, igual ao código na descriçao do exercicio.
Como nao tem, oq eu faço?

Acredito que seja apenas um print para referência do objeto que será adicionado, no caso ContaCorrente e SeguroDeVida. As saídas estão estranhas devido o método estar imprimindo a Interface Tributavel, ou seja sua referência e não os seus atributos. Lembrando que uma Interface não possui atributos apenas os métodos que serão implementados.

Espero ter ajudado!

solução!

Boa noite, André! Como vai?

Embora seja uma forma estranha, vc verá no curso Java III que essa é a forma padrão de representar de forma escrita um objeto e verá tbm no mesmo curso como alterar esse comportamento padrão! Por enquanto, a saída que vc obteve está correta!

Bons estudos!

Dê uma olhada nesse link, onde fala sobre o método toString.

https://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html

De acordo com o texto, isso que está sendo impresso é uma representação textual da referência do objeto, uma vez que o método toString não foi sobrescrito.

Então, qual é a saída correta? Os nomes dos "produtos" que estão sendo tributados e o valor total?

Você esta trazendo a saida da memória aonde esta guardada sua variavel, E não oque contem armazenada na sua variavel.

Ok. Eu entendi isso. Eu quero saber qual é a saída correta. O print do exercício.

Resolvido pessoal. É essa a saída:

Adicionando Tributavel: 42.0 Adicionando Tributavel: 10.0 Total: 52.0

Certo?

Olá Andre Henriques,

O método toString() não está implementado nas classes ContaCorrente e SeguroDeVida, neste caso o método toString() de Object é invocado. Experimente implementar um método toString() para cada classe, você verá que por meio do polimorfismo o método correto de cada classe será invocado.

Olá Andre, tive o mesmo problema que voce, e consegui resolver por aqui. Nao sei se outros alunos postaram uma dica semelhante, mas segue o que eu fiz:

Na classe GerenciadorDeImpostoDeRenda, o seu metodo adiciona está da mesma forma que eu fiz.

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

eu mudei para

    void adiciona(Tributavel t) {
        this.total+=t.calculaTributos();/// 1º - atribui à variavel "total" o resultado do metodo calculaTributos() 
        System.out.println("Adicionando Tributo: "+this.total);// no print mudei a variavel de t, que na verdade tem a referencia de um objeto, para a variavel do metodo, no caso this.total    }

Espero ter Ajudado, boa sorte.