En Java, cuando se debería utilizar un método abstracto en una interfaz?
-
18-09-2019 - |
Pregunta
Tengo el siguiente interfaz en Java
public interface IFoo
{
public abstract void foo();
public void bar();
}
¿Cuál es la diferencia entre foo () y bar ()? ¿Cuándo debo utilizar abstracto?
Ambos parecen haber realizado lo que deseo, a menos que me falta algo sutil?
Actualizar Duplicar de ¿Por qué uno declarar un método de interfaz Java como abstracto?
Solución
No hay ninguna diferencia funcional. Sin aplicación alguna vez se proporciona en una interfaz Java por lo que todas las declaraciones de métodos son implícitamente abstracta.
Vea [1]: http: //java.sun .com / docs / libros / tutorial / java / IandI / abstract.html
forman una cita directa de lo anterior:
Nota: Todos los métodos en una interfaz (véase la sección Interfaces) son implícitamente abstracta, por lo que el modificador abstract no se utiliza con métodos de interfaz (que podría ser, no es sólo necesario)
.
Otros consejos
métodos de interfaz son ambos public
y abstract
por defecto. No hay diferencia entre foo()
y bar()
y se puede retirar de forma segura todas las palabras clave y public
abstract
.
Usted no está perdiendo nada. Desde el de Java Language Specification :
Cada declaración de método en el cuerpo de una interfaz es implícitamente abstracta, por lo que su cuerpo es siempre representado por un punto y coma, no una bloque.
Cada declaración de método en el cuerpo de una interfaz es implícitamente público.
En otras palabras, se puede omitir el public
así como la abstract
en los métodos de interfaz.
es redundante (no hay diferencia entre las dos declaraciones) y desanimado explícitamente en sección 9.4 de la especificación del lenguaje Java:
Para la compatibilidad con versiones anteriores de la plataforma Java, se permite pero desanimado, como una cuestión de estilo, para especificar redundantemente el resumen modificador para métodos declarados en interfaces.
Y public
es igualmente innecesario y desanimado:
Está permitido, pero desaconseja encarecidamente como una cuestión de estilo, para especificar la forma redundante modificador pública para métodos de interfaz.
No sé por qué public
es muy desanimados, pero abstract
es sólo desalentado ...
Tanto lograr los mismos, ya que todos los métodos en una interfaz son abstractos.
abstract
en este escenario es innecesario (como está marcando métodos en interfaces como public
).
Se podría en lugar utilizar esto en un método en una clase abstracta con el fin de hacer cumplir su primordial por una subclase.
Ya no hay diferencia entre las declaraciones. Conceptualmente, todos los métodos en una interfaz son abstractos.
No hace ninguna diferencia. Todos los métodos en una interfaz Java son siempre abstracto.
Vea la primera nota en este enlace: http://java.sun.com/docs/books/ tutorial / java / IandI / abstract.html
Tanto foo () y bar () son abstractas, ya que se declaran dentro de una interfaz. La palabra abstracta que utilizó aquí no es de importancia -. Se quita mejor
Las interfaces de Java son iguales "de alguna manera" a una clase totalmente abstractas, por lo que añadir la palabra clave "abstracto" a una declaración de método en una interfaz no tiene nada que ver con el método!