Só algumas considerações:
1)Pelo o que vc respondeu:
Parece que vc tinha uma classe Filho que herda de uma classe Pai, e que vc tinha implementado o método toString() na classe Filho, e que, ao tirar esse método da classe Filho e implementá-la na classe Pai, passou a funcionar seu programa.
Eu acho que você não implementou na classe errada o toString(). Se Filho herda de Pai, e a classe Filho tem aquela implementação de toString() que vc postou, então a invocação deste método só iria retornar aquele negócio de <nome_classe>@, se vc invocou o toString() a partir de um objeto da classe Pai ao invéz da classe Filho. Confuso? Vamos a um exemplo:
Supondo que o toString() esteja implementado na classe Filho, o seguinte programa:
public class Teste{
public static void main(String[] params){
Pai umPai = new Pai(/*Alguma coisa aqui*/);
Pai umFilho = new Filho(/*Alguma coisa aqui*/);
System.out.println("'umPai' em formato textual:" + umPai.toString());
System.out.println("'umFilho' em formato textual:" + umFilho.toString());
System.exit(0);
}
}
Iria produzir a seguinte saída de texto:
'umPai' em formato textual: um.pacote.qualquer.Pai@45f3dee
'umFilho' em formato textual:
dependente01
dependente02
...
dependente-n
Acho que talvez vc tenha invocado o toString() a partir de um objeto da sua superclasse. Como sua superclasse não implementava o toString(), ela deixava o toString() do parente superior mais próximo assumir (que nesse caso era o toString() da classe Object). Por isso que quando vc moveu o toString() da classe pra super classe “deu certo”.
Procure na net algum material sobre herança e polimorfismo, que aí vc vai ver que do jeito que estava, estava certo (e certo sem aspas :lol: ).
…
2)Se não me engano, quando vc invoca o toString() de um objeto que não implementa esse método (utiliza, por herança, o toString() da classe Object), o que vem escrito depois do “@” não é necessariamente o endereço (do objeto, eu presumo) hexadecimal. O que vem depois do “@” é obtido assim:
Integer.toHexString(hashCode())
Então, o que vem depois do “@” vai depender de como a classe do objeto implementa o método hashCode(). Se ele não implementer, e acabar deixando o método hashCode() da classe Object “assumir”, aí o que teremos depois do “@” é um hexadecimal que representa um inteiro, que por sua vez é uma conversão do endereço interno do objeto.
Qualquer coisa, poste mais, ok!