2010-07-20 17 views
6

Esta pregunta puede ser una tontería, pero accidentalmente comprobé que el código fuente de Java que ejecuta el método en la interfaz ejecutable se define con palabra clave abstracta. Pero según la definición de la interfaz, todos los métodos en una interfaz son por defecto abstractos. Entonces estoy confundido por qué la interfaz Runnable especialmente tiene una palabra clave abstracta para el método de ejecución. Comprobo con otras interfaces como mapa, lista, etc. pero nadie tiene palabras clave abstractas.Por qué ejecutar el método definido con la palabra clave abstracta en la interfaz ejecutable

Por favor, dame una idea de por qué está escrito así en el código fuente de Java.

public abstract void run(); 

Gracias

Respuesta

8

Desde el java language specification:

Cada declaración de método en el cuerpo de una interfaz es implícitamente abstracto, por lo que su cuerpo es siempre 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.

Para la compatibilidad con versiones anteriores de la plataforma Java, se permite pero desanimados, como una cuestión de estilo, para especificar la forma redundante modificador abstracto para los métodos declarados en interfaces.

está permitido, pero fuertemente desanimado como una cuestión de estilo, a redundante especificar el modificador pública para métodos de interfaz.

Oye, acabo de enterarme de que las declaraciones de mi interfaz son de mal estilo, porque siempre uso el modificador public.


apache Harmony sólo se suma el modificador pública (uuuh - mal estilo). SUN Oracle tiene ambos modificadores?Supongo que es porque en las "versiones anteriores" era obligatorio agregar el modificador abstract, simplemente porque el JLS menciona "compatibilidad con versiones anteriores".

Y luego: nunca cambian un sistema Ejecutable :-)

+2

¡Qué vergüenza! Andreas_d! :) – willcodejavaforfood

+0

Esto todavía no responde * por qué * los chicos de Sun pusieron 'public abstract' específicamente en el método' run() '. De eso se trataba toda su pregunta. – BalusC

+0

+1 para señalar el estilo de codificación preferido. Las declaraciones de mi interfaz también han sido de mal gusto hasta ahora;) – chrisbunney

14

La declaración 'público' es también redundante, ya que todos los símbolos son públicos por defecto en una interfaz.

Probablemente se haya escrito así por costumbre. Imagino que Runnable estaba entre las primeras interfaces concebidas en JDK 1.0, y que esa vez, la declaración predeterminada para las interfaces probablemente no había sido inculcada por completo en las mentes de los desarrolladores de JDK. Recuerdo haber leído en una entrevista con James Gosling, que en Oak, el nombre del proyecto para lo que se convirtió en Java, una vez no había interfaces, solo clases abstractas como C++, y esto puede ser una resaca de eso.

A veces también escribo "público" para métodos de interfaz y constantes, aunque no es necesario.

+0

Ya lo sé y quiero saber por qué el código java de la interfaz ejecutable está escrito así porque no requiere ninguna palabra clave pública y abstracta. He revisado otras interfaces proporcionadas por la base java, pero todas son normales. Solo esta interfaz tiene esto. Definición confusa No tengo nada en ningún foro de Java. ¿Por qué runnable fue escrito así? – viren

+1

Explico en mi respuesta por qué creo que está escrito así. Es muy probable que sea un retroceso desde cuando no había interfaces, solo clases abstractas. No causa ningún daño real, por lo que nadie se ha molestado en eliminarlo, ya que eso podría hacer más daño que bien (aunque ahora mismo, es difícil ver qué daño podría ser). – mdma

+0

@Willi - un lenguaje de programación generalmente no es ambiguo, y no lo hace 't "tipo de" trabajo de una manera u otra. Para las interfaces, el JLS declara que todos los miembros de la interfaz son implícitamente públicos. Ver JLS, 9.1.5: http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#17145 – mdma

1

Todos los métodos en una interfaz son públicos y abstractos, pero no se requiere que especifiques eso usando palabras clave. Se hará automáticamente por usted. Simplemente podría tener void run() y significaría lo mismo.

+0

Ya lo sé y quiero saber por qué se escribe el código java de la interfaz ejecutable. así porque no requiere ninguna palabra clave pública y abstracta. – viren

+0

Él no preguntó eso. Preguntó por qué aparece en el código fuente de Java con 'public abstract', mientras que en otras interfaces están (correctamente) a la izquierda. – BalusC

+0

Bueno, no podemos responder a eso ya que no hay ninguna razón para hacerlo ... – willcodejavaforfood

0

La razón por la que ha sido escrito como este en el código fuente de Java se debe a que ha sido pasado por alto por el autor.

La definición:

public abstract void run(); 

es exactamente la misma que la definición:

public void run(); 

en una interfaz. Es simplemente una cuestión de estilo. Es el estilo preferido en las interfaces de Java que los métodos de interfaz se definan sin las palabras clave públicas y abstractas.

Tenga en cuenta que no hay diferencia en la funcionalidad entre estas dos definiciones de método en una interfaz.

0

Esto parece una pregunta bastante inútil. Al menos es un lugar sin sentido para preguntarlo. Deberías preguntarle al autor. A lo que probablemente respondería '¿a quién le importa?'

+0

Es interesante. Eso es todo. – noamtm

Cuestiones relacionadas