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!