resueltos - que es un metodo abstracto java
Interfaz abstracta de Java (9)
¿Por qué es necesario que una interfaz sea "declarada" abstracta?
No es.
public abstract interface Interface {
/___.__/
|
''----> Neither this...
public void interfacing();
public abstract boolean interfacing(boolean really);
/___.__/
|
''----> nor this, are necessary.
}
Las interfaces y sus métodos son implícitamente abstract
y agregar que el modificador no hace diferencia.
¿Hay otras reglas que se apliquen con una interfaz abstracta?
No, se aplican las mismas reglas. El método debe ser implementado por cualquier clase implementadora (concreta).
Si el resumen es obsoleto, ¿por qué está incluido en Java? ¿Hay una historia para la interfaz abstracta?
Interesante pregunta. Desenterré la primera edición de JLS, e incluso allí dice "Este modificador está obsoleto y no debería usarse en nuevos programas Java" .
De acuerdo, cavar aún más ... Después de golpear numerosos enlaces rotos, logré encontrar una copia de la Specification original Oak 0.2 (o "manual"). Es bastante interesante leer, debo decir, ¡y solo 38 páginas en total! :-)
En la Sección 5, Interfaces, proporciona el siguiente ejemplo:
public interface Storing {
void freezeDry(Stream s) = 0;
void reconstitute(Stream s) = 0;
}
Y en el margen dice
En el futuro, la parte "= 0" de declarar métodos en interfaces puede desaparecer.
Asumiendo =0
fue reemplazado por la palabra clave abstract
, sospecho que el abstract
fue en algún momento obligatorio para los métodos de interfaz.
Artículo relacionado: Java: interfaces abstractas y métodos abstractos de interfaz
Considere un ejemplo (que compila en Java)
public abstract interface Interface {
public void interfacing();
public abstract boolean interfacing(boolean really);
}
¿Por qué es necesario que una interfaz sea "declarada" abstracta? ¿Hay otras reglas que se apliquen con una interfaz abstracta?
Finalmente: si el abstract
es obsoleto, ¿por qué está incluido en Java? ¿Hay una historia para la interfaz abstracta?
Cada interfaz es implícitamente abstracta.
Este modificador es obsoleto y no debe usarse en nuevos programas.
[La especificación del lenguaje Java - 9.1.1.1 Interfaces abstract
]
También tenga en cuenta que los métodos de miembros de la interfaz son implícitamente public abstract
.
[La especificación del lenguaje Java - 9.2 Miembros de la interfaz]
¿Por qué están esos modificadores implícitos? No hay otro modificador (ni siquiera el modificador '' no modificador '') que sería útil aquí, por lo que no tiene que escribirlo explícitamente.
Bueno, ''Interfaz abstracta'' es una construcción léxica: http://en.wikipedia.org/wiki/Lexical_analysis .
Es requerido por el compilador, también puede escribir la interface
.
Bien, no se meta demasiado en la construcción léxica del lenguaje, ya que podrían haberlo puesto allí para resolver alguna ambigüedad de compilación que se denomina casos especiales durante el proceso de compilación o para cierta compatibilidad con versiones anteriores, intente enfocarse en el constructo léxico central.
La esencia de la interfaz es capturar algún concepto abstracto (idea / pensamiento / pensamiento de orden superior, etc.) cuya implementación puede variar ... es decir, puede haber una implementación múltiple.
Una interfaz es un tipo de datos abstracto puro que representa las características del objeto que está capturando o representando.
Las características se pueden representar por espacio o por tiempo. Cuando están representados por espacio (almacenamiento de memoria) significa que su clase concreta implementará un campo y método / métodos que operarán en ese campo o por tiempo, lo que significa que la tarea de implementar la característica es puramente computacional (requiere más relojes de CPU para el procesamiento) por lo que tiene una compensación entre el espacio y el tiempo para la implementación de características.
Si su clase concreta no implementa todas las características, de nuevo se vuelve abstracta porque tiene una implementación de su pensamiento o idea o abstracción pero no está completa, la especifica por clase abstract
.
Una clase concreta será una clase / conjunto de clases que capturará completamente la abstracción que está tratando de capturar la clase XYZ.
Entonces el Patrón es
Interface--->Abstract class/Abstract classes(depends)-->Concrete class
No es necesario Es un capricho del lenguaje.
No es necesario declarar el resumen de la interfaz.
Igual que declarar todos esos métodos públicos (que ya son si la interfaz es pública) o abstractos (que ya están en una interfaz) es redundante.
Sin embargo, nadie te está deteniendo.
Otras cosas que puede indicar explícitamente, pero no necesita:
- llamar a super () en la primera línea de un constructor
-
extends Object
- implementar interfaces heredadas
¿Hay otras reglas que se apliquen con una interfaz abstracta?
Una interfaz ya es "abstracta". Aplicar esa palabra clave de nuevo no hace absolutamente ninguna diferencia.
No es necesario, es opcional, igual de public
en los métodos de interfaz.
Ver el JLS en esto:
http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html
9.1.1.1 Interfaces abstractas Cada interfaz es implícitamente abstracta. Este modificador es obsoleto y no debe usarse en nuevos programas.
Y
9.4 Declaraciones de métodos abstractos
[...]
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.
Está permitido, pero desaconsejado como una cuestión de estilo, especificar de forma redundante el modificador público para los métodos de interfaz.
No es necesario, ya que las interfaces son abstractas por defecto ya que todos los métodos en una interfaz son abstractos.
Tenga en cuenta que en primavera tiene un significado no académico. La interfaz abstracta es una advertencia al desarrollador para que no la use para @Autowired
. Espero que Spring / Eclipse @Autowired
observe este atributo y advierta / deje de usarlo.
Un ejemplo real: el proxy @Service bajo @Transnational to @Repository necesita usar los mismos métodos básicos, sin embargo, deberían usar diferentes interfaces que @Autowired
esta interfaz abstracta debido a @Autowired
. (Llamo a esta interfaz XXXSpec)
Una interfaz abstracta no es tan redundante como todo el mundo parece estar diciendo, al menos en teoría.
Una interfaz se puede extender, al igual que una clase. Si diseña una jerarquía de Interfaz para su aplicación, puede tener una Interfaz ''Base'', extiende otras Interfaces desde, pero no desea, como un Objeto en sí mismo.
Ejemplo:
public abstract interface MyBaseInterface {
public String getName();
}
public interface MyBoat extends MyBaseInterface {
public String getMastSize();
}
public interface MyDog extends MyBaseInterface {
public long tinsOfFoodPerDay();
}
No desea que una clase implemente MyBaseInterface, solo las otras dos, MMyDog y MyBoat, pero ambas interfaces comparten la interfaz MyBaseInterface, por lo que tiene una propiedad ''name''.
Sé que es un poco académico, pero pensé que algunos podrían encontrarlo interesante. :-)
En realidad, es solo un ''marcador'' en este caso, para indicar a los implementadores de la interfaz que no fue diseñado para ser implementado por sí mismo. Debo señalar un compilador (al menos, el sol / ora 1.6 con el que lo probé) compila una clase que implementa una interfaz abstracta.