¿Por qué se declararía un método de interfaz Java como abstracto?


Usé la función de refactorización "pull interfaz" de Eclipse hoy para crear una interfaz basada en una clase existente. El cuadro de diálogo ofrecía 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 métodos de interfaz como abstractos era una característica superflua e inofensiva del lenguaje que no es particularmente alentada.

¿Por qué Eclipse soporte tal estilo, o ¿por qué alguien voluntariamente elegiría hacerlo?

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 son abstractos de todos modos.

Author: Jack G., 2009-03-13

4 answers

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

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

 141
Author: jdmichal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-13 15:24:22

"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 jdt eclipse compiler en jdk1.3

Desde la versión 1.4, las bibliotecas jdk ya no contienen métodos abstractos predeterminados (en clases abstractas que implementan interfaces).
Esto está engañando 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 realizar contra bibliotecas 1.4 (usando la opción-bootclasspath).

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

 38
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-13 07:15:26

Del Java SE 7 JLS (Especificación del lenguaje Java): "Se permite, pero se desaconseja como 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 versiones anteriores de la plataforma Java, se permite pero se desaconseja, como cuestión de estilo, especificar redundantemente el modificador abstracto para los métodos declarados en las interfaces."

 36
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-12 21:42:48

De acuerdo con 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 presentacional".

 9
Author: Daniel Hiller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-14 08:46:01