Interface e metodo toString

Tenho uma interface e quero que os objetos que a implementem sobrescrevam o método toString(), porém a interface do java, até onde eu sei, só obriga o objeto a ter o método, como a classe Object tem, de nada adianta eu colocar o toString() na interface.
Enquanto o projeto é meu tá tudo tranquilo pois eu sobrescrevo o método em todas as classes necessárias, porém queria uma forma de obrigar qualquer um que herde o sistema a sobrescrevê-la (deixar só na documentação sabemos que não é eficiente). Alguém sabe uma maneira de fazer isso sem usar herança, pois no meu caso ela quebraria a orientação a objetos?
Muito Obrigado.

Cara, acho que por Interface não rola o treco de forçar o cara a implementar o toString()… Massssss…

Não sei se o teu projeto permite, mas dá pra fazer assim:

abstract class BaseClass implements SuaInterface{
    @Override
    public abstract String toString();
}
public class Teste extends BaseClass{
//Aqui o cara será obrigado a implementar todos os métodos da sua interface + toString();
}

Espero que isso ajude =D

mas se fizer assim não da na mesma que colocar na interface???

eu pensei que ele poderia fazer isso sim porem sem usar classe abstrata,
ai as classes filhas herdariam o metodo toString() da classe mãe , que por sua vez implementa a interface.
mas isso só seria interessante se vc for usar o mesmo toString pra todas as filhas.

Sem usar herança não tem como fazer o que você quer. Como você mesmo constatou, o método já está implementado em object, portanto, o java nunca irá reclamar que a implementação não existe. Deixe só na documentação mesmo.

Agora, o que o seu toString() faz de tão importante? Talvez fosse uma boa criar um outro método, e fazer a implementação com base nele ao invés do toString().

Só um outro comentário. Acho que forçar uma superclasse por causa disso é ainda pior do que confiar só na documentação.

Dependendo do que o seu toString() faça, ainda a melhor alternativa seria criar um outro método, ou deixar o toString() na interface mesmo que o programador seguirá o javadoc à risca.

Herdar o metodo abstract acho um gato danado pra arquitetura.

Na verdade, o toString() não faz nada de importante para as regras de negócio, é apenas como as informações do objeto vão ser exibidas para os usuários. Meu sistema usa a porta serial para se comunicar com alguns equipamentos que desenvolvemos. Minha interface modela mensagens a serem transmitidas na porta serial, ela tem o toBytes() que muito importante para a comunicação e o toString() que serve apenas para visualizar os dados da mensagem.

Como a interface é implementada por várias classes e com previsão futuras para mais, acho q seria legal já avisar o programador pra fazer o toString() antes de ir pros testes e depois voltar avisando que na tela tem uns numeros estranhos onde deveriam estar os dados da mensagem…
To vendo que vou ter que colocar um método getInfo() na minha interface e chamar ele na hora de exibir na tela. Preferia usar o toString() pois já é um método feito para esse propósito e deixaria o código mais limpo.

Obrigado pela ajuda galera!