O método toString existe por padrão em todas as classes, ele é herdado da classe Object, tem por objetivo retornar uma representação String do objeto.
Você até poderia criar um método que tem o mesmo fim mas para utiliza-lo você teria que usar explicitamente, por exemplo:
Pessoa pessoa = new Pessoa();
pessoa.nome = "Caroline";
System.out.println(pessoa.seuMetodoPersonalizado());
//Retornando aquilo que foi definido no seu método.
Ao sobrescrever o método toString() você pode retornar o seu objeto como String sem ter que invocar o método que faz isso, por exemplo:
public class Pessoa {
String nome;
@Override
public String toString() {
return "nome: " + this.nome;
}
}
class Program {
public static void main(String[] args) {
Pessoa pessoa = new Pessoa();
pessoa.nome = "Caroline";
/**
Perceba que basta inserir o objeto dentro do sysout,
não precisa chamar o método que faz isso.
**/
System.out.println(pessoa);
//Retorna: nome: Caroline.
}
}
Espero ter sanado a sua dúvida.