2011-08-20 11 views
15

En un solo archivo .Java, es posible tener una interfaz pública y una clase pública (que implementa la interfaz)Java interfaz pública y la clase pública en el mismo archivo

Soy nuevo en la codificación de Java y se está escrito en la mayoría de los lugares de la red que un archivo .java no puede contener más de 2 clases públicas. Quiero saber si es cierto para la interfaz y una clase también.

+0

posible duplicado de [Java: declaraciones de clases múltiples en un archivo] (http://stackoverflow.com/questions/2336692/java-multiple-class-declarations-in-one-file) –

Respuesta

14

No, no es posible. Puede haber como máximo un tipo público de nivel superior por archivo .java. JLS 7.6. Top Level Type Declarations indica lo siguiente:

[& hellip;] debe haber como máximo un [nivel público superior] tipo por unidad de compilación.

Sin embargo, podría tener una clase protegida por paquete en el mismo archivo. Este compila bien (si lo pones en un archivo llamado Test.java:

public interface Test { 
    // ... 
} 

class TestClass implements Test { 
    // ... 
} 
+2

[JLS §7.6 Nivel superior Escriba declaraciones] (http://java.sun.com/docs/books/jls/third_edition/html/packages.html#26783) –

3

La regla de Java es que sólo una clase o interfaz pública pueden aparecer en un archivo de origen y el nombre debe coincidir con el archivo (es decir, la prueba .java -> public class Test o prueba de interfaz pública, pero no ambos)

7

puede tener tantas clases públicas como desee en un archivo si utiliza clases anidadas en su ejemplo:

public interface I { 
    public class C implements I { 
     ... 
    } 

    public class D implements I { 
     ... 
    } 

    ... 
} 
..
+0

¡Exactamente! Estaba a punto de publicar una respuesta similar. ¿Podrías por favor decirme de qué sirve tener una estructura así? Si trato de crear una instancia de la clase 'C', me veo obligado a volver a implementar los métodos definidos en 'I', ¡incluso si ya lo hice al desafiar la clase 'C'! PD Supongo que 'C' no necesita ser estático. – Gevorg

+0

@Gevorg - La palabra clave estática significa que es lo mismo que una clase de nivel superior. La única diferencia aquí es que solo puede referirse a C como 'I.C' – Kal

+1

A menudo uso este modismo si defino una interfaz 'I' y una 'implementación predeterminada' de 'I' que se utiliza si no se necesita una instancia especial. Me gusta porque puedo tenerlos cerca, no es necesario dispersarlos en varios archivos. Y además de eso simplemente lee increíble decir: 'setParam (new Interface.Default());' Si no usé una clase interna, tuve que pensar en un nombre inteligente, así puedo llamarlo 'Default '. – emboss

4
public interface A 
{ 
    public void helloWorld(); 

    public static class B implements A{ 

     @Override 
     public void helloWorld() { 
      System.out.print("Hello World"); 

     } 

    } 
} 
0

Uno también necesita comprender interface driven programming como siguiente paso mientras entiende una interfaz. Dice cuál es el uso real de la interfaz. Qué papel juega en un programa Java (o cualquier otro idioma).

Cuestiones relacionadas