una resueltos que polimorfismo interfaces ejercicios ejemplos ejemplo clases clase abstractas abstracta java eclipse interface abstract

resueltos - polimorfismo java



¿Por qué uno declararía un método de interfaz Java como abstracto? (4)

"El beneficio de eso" (agregar resumen en la declaración de métodos de interfaz) en eclipse sería un viejo problema de compatibilidad con el compilador jdt eclipse en jdk1.3

Desde 1.4, las bibliotecas jdk ya no contienen métodos abstractos por defecto (en clases abstractas que implementan interfaces).
Esto engaña al diagnóstico del compilador Eclipse 1.3 ya que su implementación depende de su existencia.
Tenga en cuenta que Javac 1.3 se negaría por completo a funcionar contra las bibliotecas 1.4 (utilizando la opción -bootclasspath).

Dado que es probable que el compilador Eclipse esté en el nivel de cumplimiento 1.4 (consulte Workbench>Preferences>Java>Compiler>JDK Compliance ) o use al menos 1.3 bibliotecas de clases si usa el modo 1.3 compliance, la presencia de "abstract" no es necesaria en la mayoría de los proyectos de eclipse actuales.

Utilicé la función de refactorización de "interfaz de extracción" de Eclipse hoy para crear una interfaz basada en una clase existente. El cuadro de diálogo ofreció crear todos los nuevos métodos de la nueva interfaz como métodos "abstractos".

¿Cuál sería el beneficio de eso?

Pensé que el hecho de que se le permitiera declarar los métodos de interfaz como abstract era una característica superflua e inofensiva del lenguaje que no se fomenta particularmente.

¿Por qué Eclipse apoyaría ese estilo o por qué alguien voluntariamente lo haría?

Aclaración: no estoy preguntando por qué los métodos de interfaz son abstractos, eso es obvio. Me pregunto por qué uno elegiría explícitamente marcarlos como abstractos, ya que si están en una interfaz, de todos modos son abstractos.


De Java SE 7 JLS (Especificación del lenguaje Java): "Está permitido, pero desaconsejado como una cuestión de estilo, especificar redundantemente el modificador público y / o abstracto para un método declarado en una interfaz".

Para Java SE 5.0 : "Para la compatibilidad con las versiones anteriores de la plataforma Java, está permitido, pero desaconsejado, como una cuestión de estilo, especificar de forma redundante el modificador abstracto para los métodos declarados en las interfaces".


Según JLS, los métodos en las interfaces son abstractos por defecto, por lo que la palabra clave es redundante. Sabiendo esto, nunca lo usaría para "evitar el desorden de presentación".


De acuerdo con la Especificación del lenguaje Java , la palabra clave abstract para interfaces está obsoleta y ya no debe usarse. (Sección 9.1.1.1)

Dicho esto, con la propensión de Java hacia la compatibilidad con versiones anteriores, realmente dudo que alguna vez marque la diferencia si la palabra clave abstract está presente.