La interfaz de miembro solo se puede definir dentro de una clase o interfaz de nivel superior o en un contexto estático.
Caso A: la interfaz dentro de una clase de nivel superior funciona perfectamente
package multiplei.interfaces.test; public class InterfaceBetweenClass { interface Foo { void show(); } class InnerClass implements Foo{ public void show(){ System.out.println("Inner Class implements Foo"); } } public static void main(String[] args) { new InterfaceBetweenClass().new InnerClass().show(); } }Caso B: la interfaz dentro de una interfaz funciona bien.
public interface Creatable { interface Foo{ void show(); }}Caso C: Sé que suena estúpido por qué alguien definiría una interfaz en un contexto estático. Pero me da el mismo mensaje de error cuando intento definir la interfaz en un contexto estático.
package multiplei.interfaces.test; public class InterfaceBetweenClass { public static void main(String[] args) { interface Foo { //Line 5 void show(); } } }} Pero la línea número 5 me da el siguiente mensaje de error: "The member interface Foo can only be defined inside a top-level class or interface or in a static context. Por favor, ayúdenme con esto. Si una interfaz se puede definir en un contexto estático, entonces ¿cómo?
No puede definir interfaces dentro de los métodos.
Creo que el escenario al que se refiere el mensaje de error es definir una interfaz dentro de una clase interna (que se puede hacer, pero solo si es una clase interna static ):
class A{ static class X{ interface Y{} } }Para la interfaz, tanto la interfaz anidada como la interfaz miembro son lo mismo (#opuesto a la clase miembro). Además, la interfaz de miembro es una interfaz que está DIRECTAMENTE encerrada por otra clase u otra interfaz. Por lo tanto, la interfaz local NO existe.