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

O que aciona o método toString() na minha classe conta?

Não entendi qual dispositivo da linguagem chama o método toString na classe. Na main não invoco o método toString?

É uma regra da linguagem? Se eu passou um objeto no sysout e na classe deste objeto tem o método toString implementado, a JVM vai lá e invoca este método implicitamente? E se não houver o método, ela simplesmente passa o endereço dele?

3 respostas
solução!

Oi Geovane, supondo que você tem uma Classe Aluno e tem os atributos :

int id; String nome;

Quando lá no Main.java você criou um novo Aluno, com Aluno novoAluno = new Aluno();

e fez um syso(aluno);

Como a classe aluno não tem a implementação de toString();

então será chamado a implementação de toString da classe Object, que é pai de todas as classes do Java,

logo no console será impresso: Aluno:h123h232 (nr qualquer)

Porque eu sei que será impresso: Aluno:h123h232 (nr qualquer) Pq eu vi na documentação a implementação do toString da classe Object

Mas se você quiser deixar o toString mais enteressante pra vc, basta implementar na classe Aluno.

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

E como a implementação está dentro do Aluno, então vc pode customizar:

@Override
    public String toString() {
        return "Nome: "+ nome + " -  Id: " + id ;
    }

Espero ter ajudado a compreender, talvez seja difícil agora, mas tente entender com a documentação também: https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()

Public String toString()
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

 getClass().getName() + '@' + Integer.toHexString(hashCode())

Returns:
a string representation of the object.

Opa tudo bem Geovane ? vou tentar ajudar um pouco você ta legal ?

Sempre que invocamos uma classe ela herda da classe object. Usamos constantemente classes como System e String e te pergunto da onde vem essas classes ? Elas vem do pacote Java.lang (Já é importado automaticamente para você).

Quando o Java não encontra a palavra chave extends, ele considera que você está herdando da classe Object, que também se encontra dentro do pacote java.lang.Todas as classes, sem exceção, herdam de Object, seja direta ou indiretamente, pois ela é a mãe, vó, bisavó, etc de qualquer classe.

Podemos também afirmar que qualquer objeto em Java é um Object, podendo ser referenciado como tal. Então, qualquer objeto possui todos os métodos declarados na classe Object e veremos alguns deles logo após o casting.

Por padrão o método toString é chamado na sua classe mãe (object) no entanto ela vai apresentar na tela o valor de memória da classe ou seus objetos. Para você apresentar os dados da forma desejada, você deve sobre-escrever o método (override) dentro da sua classe. >> Use os exemplos acima :D

Se quiser entender melhor sobre o pacote java.lang >> https://www.caelum.com.br/apostila-java-orientacao-objetos/o-pacote-java-lang/#14-5-metodos-do-java-lang-object-equals-e-tostring

Certo, galera entendi. Estava pensando que o método toString tinha outra finalidade. Enfim, entendi.