2011-08-20 18 views
15

In un unico file .java, è possibile avere un'interfaccia pubblica e una classe pubblica (che implementa l'interfaccia)interfaccia pubblica Java e classe pubblica nella stesso file

Sono nuovo di codifica Java e è scritto sulla maggior parte dei posti in rete che un file .java non può contenere più di 2 classi pubbliche. Voglio sapere se è vero anche per l'interfaccia e una classe.

+0

possibile duplicato di [Java: dichiarazioni di più classi in un file] (http://stackoverflow.com/questions/2336692/java-multiple-class-declarations-in-one-file) –

risposta

14

No, non è possibile. Potrebbe esserci al massimo un tipo pubblico di primo livello per il file .java. JLS 7.6. Top Level Type Declarations afferma quanto segue:

[& hellip;] ci deve essere al massimo un [tipo di pubblico superiore] per unità di compilazione.

Si potrebbe tuttavia avere una classe protetta da pacchetto nello stesso file. Questo compila bene (se lo metti in un file chiamato Test.java:

public interface Test { 
    // ... 
} 

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

[JLS §7.6 Primo livello Type Declarations] (http://java.sun.com/docs/books/jls/third_edition/html/packages.html#26783) –

3

La regola Java è che solo una classe pubblica o interfaccia si può mostrare in un file di origine, e il nome deve corrispondere il file (cioè prova .java -> public class test o test interfaccia pubblica, ma non entrambi)

7

si possono avere molte classi pubbliche che si desidera in un unico file, se si utilizzano le classi nidificate nel tuo esempio:

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

    public class D implements I { 
     ... 
    } 

    ... 
} 
..
+0

Esattamente! Stavo per pubblicare una risposta simile. Potresti dirmi, per favore, qual è il punto di avere una tale struttura? Se provo a creare un'istanza della classe "C", sono costretto a ri-implementare i metodi definiti in "I", anche se l'ho già fatto sfidando la classe "C"! Post scriptum Suppongo che "C" non abbia bisogno di essere statico .. – Gevorg

+0

@Gevorg - La parola chiave static indica che è uguale a una classe di livello superiore. L'unica differenza qui è che puoi riferirti a C come "I.C" – Kal

+1

Spesso uso questo idioma se definisco un'interfaccia "I" e una "implementazione predefinita" di "I" che viene usata se non è necessaria alcuna istanza speciale. Mi piace perché posso farli chiudere - non c'è bisogno di disperderli tra diversi file. E oltre a ciò si legge semplicemente fantastico: 'setParam (new Interface.Default());' Se non usassi una classe interna dovevo pensare a un nome intelligente, in questo modo posso semplicemente chiamarlo 'Predefinito '. – 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 deve anche capire interface driven programming come prossimo passo durante la comprensione di un'interfaccia. Indica qual è l'uso effettivo dell'interfaccia. Che ruolo gioca in un programma Java (o qualsiasi altra lingua).

Problemi correlati