He estado consultando la API JMS desde J2EE y encontré un comportamiento extraño en el que ciertos métodos que se declaran en una interfaz (por ejemplo, createQueue en Session) se vuelven a declarar en las subinterfaces como QueueSession y con documentación idéntica.En Java, cuando una interfaz se extiende a otra, ¿por qué se volvería a declarar un método en una subinterfaz?
Dado que una subinterfaz "hereda" todas las declaraciones de métodos de la interfaz que hereda, y como la herramienta JavaDoc no tiene problemas para ordenar los JavaDocs de la subinterfaz y crear una lista de "operaciones heredadas", no puedo entender lo que esto logra
Lo único que se puede pensar es que inicialmente la llamada estaba en Session, y luego se movió a QueueSession cuando se creó la subclase específica, aunque entonces habría esperado ver algo en la documentación de la clase superior. Pero esto es solo conjetura.
Así que la pregunta es: ¿Hay alguna razón convincente para redeclarar un método en una subinterfaz?
Eso tiene sentido Pero ¿por qué no cambiar los JavaDocs en la superclase y decir algo así como "Hazme un favor, nunca me invoques directamente, cree una instancia de la subinterfaz"? – Uri
Porque seria admitir un error? Más en serio, podría ser que la interfaz superclase * * a veces se usa sola, no hay razón para que una refactorización no pueda ser simplemente eliminar métodos. –
"se da cuenta de que Necesito alguna otra interfaz, llámala Bob, que tiene un subconjunto de los métodos de Alicia "Si todo lo que necesitan es un subconjunto de Alicia, ¿por qué no pueden hacer que Bob sea una interfaz separada con solo unos pocos métodos de Alicia, en lugar de hacer Alice es su superclase? – Jagat