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.