2011-06-21 12 views
5

Aquí es mi clase de muestra, que compila y se ejecuta() con la versión 1.6.0_14 de Java:¿Por qué javac no se queja de más de una clase pública por archivo?

import java.util.List; 
import java.util.ArrayList; 

public class Sample { 
    List<InnerSample> iSamples; 

    public Sample() { 
    iSamples = new ArrayList<InnerSample>(); 
    iSamples.add(new InnerSample("foo")); 
    iSamples.add(new InnerSample("bar")); 
    } 

    public static void main(String[] args) { 
    System.out.println("Testing..."); 
    Sample s = new Sample(); 
    for (InnerSample i : s.iSamples) { 
     System.out.println(i.str); 
    } 
    } 

    public class InnerSample { 
    String str; 
    public InnerSample(String str) { 
     this.str = str; 
    } 
    } 
} 

sé que se supone que sólo tienen una clase pública por archivo en Java, pero esto es más de una convención que una regla?

Respuesta

12

No tiene permitido tener más de un nivel superior clase por archivo. InnerSample es una clase interna .

Este es un ejemplo de lo que está prohibido en un solo archivo:

public class Sample { 

} 

public class Sample2 { 

} 

Ver JLS §7.6.

+0

Ah, eso tiene más sentido. Por alguna razón, acababa de escuchar que solo había un público por archivo. ¡Gracias! – Pat

4

No puede tener más de una clase pública de nivel superior.

Las clases/interfaces/enumeraciones/enumeraciones anidadas/internas no cuentan.

1

En su ejemplo, InnerSample es una clase "inner". Una clase interna DEBE estar dentro de otra clase (y, por lo tanto, dentro del archivo fuente de la clase externa).

0

Porque es una clase pública interior

+0

Esto es realmente un comentario, no una respuesta a la pregunta. Utilice "agregar comentario" para dejar comentarios al autor. –

+0

puede decir que es una respuesta corta pero definitivamente no es un comentario. Ningún comentario puede comenzar con la palabra "porque". – fmucar

Cuestiones relacionadas