2009-06-09 16 views

Respuesta

112

Sí, puede. Sin embargo, solo puede haber una clase pública de nivel superior por cada archivo .java, y las clases públicas de nivel superior deben tener el mismo nombre que el archivo fuente.

El objetivo de incluir varias clases en un archivo fuente es agrupar la funcionalidad de soporte relacionada (estructuras internas de datos, clases de soporte, etc.) junto con la clase pública principal. Tenga en cuenta que siempre está bien no hacer esto, el único efecto es en la legibilidad (o no) de su código.

+1

Creo que es una buena idea hacerlo si desea mantener las clases adicionales privadas, para que puedan cambiarse completamente más tarde sin romper nada que accidentalmente utilice esas clases. –

+3

Está ahí para la compatibilidad 1.0 (antes de las clases anidadas). Es un gran error en el lenguaje. La mayor ventaja de usarlo es que los IDEs tienen un manejo de archivos sin esperanzas. –

+23

Una clase pública * de nivel superior por archivo. Puede haber tantas clases internas públicas por archivo como desee. – erickson

1

Varía ... Un ejemplo sería anonymous classes (se encontrará con mucho cuando se utilicen escuchas de eventos y cosas por el estilo).

2

Sí, puede, pero solo puede haber 1 clase pública dentro de cualquier paquete, ya que el compilador java crea el archivo .Class que es del mismo nombre que el nombre de clase pública, por lo tanto si son más de 1 clase pública sería Es difícil seleccionar para el compilador cuál debería ser el nombre del archivo Class.

15

Si desea implementar una clase pública, debe implementarla en un archivo con el mismo nombre que esa clase. Un solo archivo puede contener una clase pública y opcionalmente algunas privadas. Esto es útil si las clases solo las usa internamente la clase pública. Además, la clase pública también puede contener clases internas.

Aunque está bien tener una o más clases privadas en un único archivo fuente, diría que es más fácil usar clases internas y anónimas. Por ejemplo, se puede utilizar una clase anónima para definir una clase Comparador dentro de una clase pública:

public static Comparator MyComparator = new Comparator() { 
    public int compare(Object obj, Object anotherObj) { 

    } 
    }; 

La clase Comparador normalmente requiere un archivo separado con el fin de ser pública. De esta forma, se incluye con la clase que lo usa.

+1

No es realmente una clase * privada * si está en el archivo sin modificador. No puede tener una clase * privada * sin que sea una clase interna porque si lo hizo, ¿quién podría usarla? –

4

En general, debe haber una clase por archivo. Si organiza las cosas de esa manera, cuando busca una clase, sabe que solo necesita buscar el archivo con ese nombre.

La excepción es cuando una clase se implementa mejor utilizando una o más clases pequeñas de ayuda. Generalmente, el código es más fácil de seguir cuando esas clases están presentes en el mismo archivo. Por ejemplo, es posible que necesite una pequeña clase de contenedor 'tupla' para pasar algunos datos entre llamadas a métodos. Otro ejemplo son las clases 'task' que implementan Runnable o Callable. Pueden ser tan pequeños que se combinan mejor con la clase padre creando y llamándolos.

4

Además de las clases internas anónimas, otro uso son las clases internas privadas que implementan una interfaz pública (see this article). La clase externa puede acceder a todos los campos y métodos privados de la clase interna.

Esto le permite crear dos clases estrechamente acopladas, como un modelo y su vista, sin exponer las implementaciones de ninguna. Otro ejemplo es una colección y sus iteradores.

9

Sí, ¡todas las que quiera!

PERO, solo hay una clase "pública" en cada archivo.

2

Creo que debería ser "solo puede haber una clase pública de nivel superior NO ESTÁTICA por archivo .java". ¿No es así?

+0

Debería hacer esto como una pregunta en lugar de responder aquí. –

4

Un archivo .java se denomina unidad de compilación. Cada unidad de compilación puede contener cualquier cantidad de clases e interfaces de nivel superior. Si no hay tipos públicos de nivel superior, la unidad de compilación se puede denominar cualquier cosa.

//Multiple.java 
//preceding package and import statements 

class MyClass{...} 
interface Service{...} 
... 
//No public classes or interfaces 
... 

Solo puede haber una clase/interfaz pública en una unidad de compilación. El cu. debe nombrarse exactamente como este tipo público de nivel superior.

//Test.java 
//named exactly as the public class Test 
public class Test{...} 
//!public class Operations{...} 
interface Selector{...} 
... 
//Other non-public classes/interfaces 

Important points about the main method - part 1

Part 2

(puntos respecto al número de clases y sus niveles de acceso cubiertos en la parte 2)

1

Si se desea implementar un conjunto unitario, que es una clase que se ejecuta en su programa con solo una instancia en la memoria durante la ejecución de la aplicación, entonces una de las formas de implementar un singleton es anidar una clase privada estática dentro de una clase pública. Entonces, la clase privada interna solo se crea una instancia cuando se llama a su método público para acceder a la instancia privada.

revisar este artículo de la wiki,

https://en.wikipedia.org/wiki/Singleton_pattern

El concepto toma un tiempo para masticar.

1

En un archivo .java, solo puede haber una clase pública de nivel superior cuyo nombre sea el mismo que el archivo, pero puede haber varias clases internas públicas que puedan exportarse a todos y acceder a los campos de la clase externa/métodos, por ejemplo: AlertDialog.Builder (modificado por 'public static') en AlertDialog (modificado por 'public')

1

Sí Puede tener más de una clase en un archivo .Java. Pero usted ha hecho que uno de ellos sea público. y guarde el archivo .java con el mismo nombre que el nombre de la clase pública. cuando compile ese archivo .java, obtendrá los archivos .class separados para cada clase definida en el archivo .java.

Aparte de esto, hay demasiados métodos para definir más de una clase en un archivo .java.

  1. use concept of Inner Classes.
  2. Usar el concepto de clases anónimas.
1

Sí! . El archivo .java puede contener solo una clase pública.

Si desea que estas dos clases sean públicas, debe colocarlas en dos archivos .java: A.java y B.java.

+1

No estoy seguro de que su respuesta agregue algo más de las otras 12 respuestas – goto

1

Sí, puede tener más de una clase dentro de un archivo .java. Como máximo, uno de ellos puede ser público. Los otros son paquetes privados. NO PUEDEN ser privados o protegidos. Si uno es público, el archivo debe tener el nombre de esa clase. De lo contrario, se puede dar CUALQUIER COSA a ese archivo como su nombre.

Tener muchas clases dentro de un archivo significa que esas clases están en el mismo paquete. Entonces, cualquier otra clase que esté dentro de ese paquete pero no en ese archivo también puede usar esas clases. Además, cuando se importa ese paquete, la clase de importación puede usarlos también.

Para una investigación más detallada, puede visitar mi publicación de blog en here.

+1

¡Bienvenido a Stack Overflow! Aprecio que haya expuesto información que no estaba ya cubierta aquí. También hizo un buen trabajo al citar la publicación de su blog al declarar la propiedad e incluir información relevante aquí. Si elige contribuir más a este sitio en el futuro (y espero que lo haga), asegúrese de considerar [este artículo] (http://stackoverflow.com/help/promotion) para asegurarse de que sus publicaciones continúen estando bien. recibido si cita su blog. – 4castle

3

Sí 200%,

Ejemplo:

class A { 
void methodDeclaration() { System.out.println("!!!"); } 
} 
class B { 
public static void main(String[] args) { 
new A().methodDeclaration(); 
    } 
} 
4

sí se puede crear más de una clase pública, pero tiene que ser una clase anidada.

public class first { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
    } 

    public class demo1 
    { 

     public class demo2 
     { 

     } 
    } 
} 
0

Sólo puede haber una clase pública nivel superior clase en un archivo. El nombre de clase de esa clase pública debe ser el nombre del archivo. Puede tener muchas clases internas públicas.

Puede tener muchas clases en un solo archivo. Los límites para distintos niveles de visibilidad de clases en un archivo son los siguientes:

clases de nivel superior:
1 public class
0 clase privada
cualquier número de defecto clases/protegidas

interiores clases:
cualquier cantidad de clases internas con cualquier visibilidad (predeterminado, privado, protegido, público)

Ple sígame si estoy equivocado.

Cuestiones relacionadas