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

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

Olá, no meu código até calculou a soma corretamento, mas não entendi por que no console, nos print's que do método adiciona, apareceram esses valores de memória?

Adiciona tributaval: fj11.SeguroDeVida@2a139a55
Adiciona tributaval: fj11.ContaCorrente@15db9742
Saldo: 43.0
4 respostas

Olá Marko! Ponha seu código aqui para podermos te ajudar.

public abstract class Conta {
    protected String nome;
    protected double saldo;
    protected int agencia;

    public Conta(String nome, double saldo, int agencia) {
        this.nome = nome;
        this.saldo = saldo;
        this.agencia = agencia;
    }

    public Conta(String nome, double saldo){
        this.nome = nome;
        this.saldo = saldo;
    }

    public Conta(double saldo){
        this.saldo = saldo;
    }

    public Conta() {

    }

    public String getNome() {
        return nome;
    }


    public int getAgencia() {
        return agencia;
    }

    public void setAgencia(int agencia) {
        this.agencia = agencia;
    }

    public double getSaldo() {
        return saldo;
    }

    public void imprime() {
        System.out.println();
        System.out.println("Nome: " + this.nome);
        System.out.println("Agencia: " + this.agencia);
        System.out.println("Saldo: " + this.saldo);
    }

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

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

    public abstract void atualiza(double taxaSelic);
}


public interface Tributavel {

    public double calculaTributos();

}

public class ContaCorrente extends Conta implements Tributavel {
    public ContaCorrente(String nome, double saldo, int agencia) {
        super(nome, saldo, agencia);
    }

    public ContaCorrente(String nome, double saldo) {
        super(nome, saldo);
    }

    public ContaCorrente(String nome) {
        this.nome = nome;
    }

    public ContaCorrente() {

    }

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

    @Override
    public double calculaTributos() {
        return getSaldo() * 0.01;
    }

}

public class GerenciadorDeImpostoDeRenda {
    private double total;

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

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

}

public class SeguroDeVida implements Tributavel {

    @Override
    public double calculaTributos() {
        return 42;
    }

}
solução!

Então Marko, está aparecendo essa saída no console porque você está pondo para imprimir um Objeto. Perceba pela declaração do seu método, você passa uma variável do tipo Tributavel como parâmetro:

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

Essa variável, referencia um Objeto que pode ser tanto uma ContaCorrente como um SeguroDeVida, pois ambas as classes implementam a Interface Tributavel, logo, os Objetos dessas Classes podem ser referenciados através de uma variável do tipo Tributavel.

Por padrão quando utilizamos o System.out.println() com um Objeto é chamado o método toString() da classe Object e esse toString nos retorna uma String com a referencia desse Objeto na memória. Por isso está saindo os valores de memória no seu console.

Para resolver isso, você pode sobrescrever o método toString() nas suas classes ContaCorrente e SeguroDeVida, Informando o que você quer que seja passado quando o Objeto for chamado pelo System.out.println()

Exemplo para sua classe ContaCorrente:

@Override
    public String toString() {
        return this.nome;
    }

Assim, em seu console será impresso o Nome colocado em sua ContaCorrente. Não precisa usar esse toString() so o coloquei como exemplo.

Espero ter ajudado! Qualquer dúvida so perguntar. Bons Estudos!

Alguma dúvida mais amigo? Por favor, solucione uma resposta como solução do tópico.