La extensión de una interfaz simplemente agrega operaciones adicionales para ser definidas en cualquier implementador y no puede romper ninguna implementación existente (a diferencia de extender una clase). Pero puede cambio (EDIT 3 QUE CONSTANTES) y, por lo tanto, el valor PERCIEVED de las constantes (EDIT 2 SEGÚN LAS CLASES DE IMPLEMENTACIÓN).¿Por qué no hay interfaces finales en Java?
Por ejemplo, los siguientes:
interface A {
int TEST = 6;
}
interface B extends A {
int TEST = 7;
}
public class InterfacesTest implements B {
public static void main(final String[] args) {
System.out.println(TEST);
}
}
rendimientos 7, cuando tal vez la intención de interfaz A
era que cualquier aplicación de A
contiene un campo de test
valor de 6.
Si A fuese declaró final podríamos estar seguros de que todas las implementaciones de A
ven el mismo valor de test
.
¿Alguien entiende por qué esto no es posible?
P.S .: Esta es NO un duplicado de this question, sé que no puede ser definitiva, estoy interesado en la idea detrás de la decisión de diseño que condujo a este resultado.
P.P.S .: Entiendo constantes en interfaces es generalmente una mala idea, que no es el problema aquí.
EDIT: Por favor, compruebe el historial de revisión, fue editado el título de esta pregunta de una manera que no refleja la intención de la pregunta. Perdón por todos los que respondieron la pregunta que no estaba preguntando. Sí, los campos de la interfaz son implícitamente públicos estáticos, por desgracia, eso no es lo que más me interesa.
EDIT 2 ser absolutamente claro: esta pregunta es acerca de por qué no puede un bloque de interfaz de otras interfaces de extenderlo (por ser final de o algún equivalente).
La respuesta es que son siempre * * 'final'. También son siempre 'estáticos'. – jbindel
Y los campos en las interfaces siempre son _public_ too –
Downvote. La pregunta se basa en una premisa falsa. – EJP