2011-03-18 23 views
5

algo que he visto mucho, pero nunca pensó en ponerlo en duda ... En una interfaz Java , ¿cuál es la diferencia entre:métodos abstractos en una interfaz Java

public void myMethod(); 

y

public abstract void myMethod(); 

Entiendo el propósito de la palabra clave abstracta en una clase de Java, pero ¿para qué sirve (si existe) en una interfaz?

Respuesta

12

Ambas declaraciones son completamente iguales, todos los métodos de interfaz no tienen implementación (son abstractos) por lo que la palabra clave abstract es redundante. En mi opinión, escribir abstract en este caso aumenta la verbosidad del código.

+4

Y el modificador público también es redundante. – Jcs

+0

@Jcs Eso es correcto. – nan

8

Todas las declaraciones de métodos son public y abstract en una interfaz. No hay punto que lo especifique en absoluto.

Solo se necesita void myMethod(); aquí.

6

De Java Specification:

  • 9.4 Resumen del método Declaraciones .. .. ..

Cada declaración de método en el cuerpo de una interfaz es implícitamente abstracto, por lo que su el cuerpo siempre es representado por un punto y coma, no un bloque .

Cada declaración de método en el cuerpo de una interfaz es implícitamente pública.

+0

+1 para un enlace a la declaración oficial de JLS al respecto. – mjuarez

2

Ambos public y abstract son redundantes aquí. Personalmente prefiero omitirlos porque, en mi opinión, ambos son ruidosos en este caso.

Aunque podría, por supuesto, incluirlos, creo que es perfectamente razonable suponer que cualquiera que lea su código sabe que todos los métodos en una interfaz deben ser públicos y abstractos, es una característica bien entendida.

1

Como ya hemos dicho, los métodos de interfaz SON public y abstract. Ahora es discouraged para especificar como public abstract:

Para la compatibilidad con versiones anteriores de la plataforma Java, es permitido pero desaconsejado, ya que una cuestión de estilo, especificar redundantemente el modificador abstracto para los métodos declarados en las interfaces .

Está permitido, pero desaconsejado como una cuestión de estilo, especificar de forma redundante el modificador público para los métodos de interfaz.

está completo y si interface fields SON publicstatic y final ...

+0

Gracias por el útil enlace, es extraño que agregar "resumen público" sea el comportamiento predeterminado en las últimas herramientas de refactorización de Eclipse. – seanhodges

0

Aunque puede declarar explícitamente, todos los métodos en una interfaz son implícitamente públicos y abstractos. El compilador se quejará solo si intentas que no sean abstractos (proporcionando el cuerpo) y privados.

Cuestiones relacionadas