Para organizar mejor las cosas, un paquete, en vez de clases, también puede contener otros paquetes. Es decir, podemos hacer subpaquetes de los paquetes y subpaquetes de los subpaquetes y así sucesivamente. Esto permite agrupar paquetes relacionados en un paquete más grande. Por ejemplo, si quiero dividir mis clases de ejemplos en ejemplos básicos y ejemplos avanzados, puedo poner más niveles de paquetes separando por puntos:
package ejemplos.basicos;
package ejemplos.avanzados;
A nivel de sistema operativo, tendríamos que crear los subdirectorios basicos
y avanzados
dentro del directorio ejemplos
, y meter ahí las clases que correspondan.
Para compilar, en el directorio del proyecto habría que compilar poniendo todo el path hasta llegar a la clase. Es decir, el nombre de la clase va con todos los paquetes separados por puntos, por ejemplo ejemplos.basicos.Bienvenida
.
La estructura de directorios en el sistema operativo cuando usamos subpaquetes sería:
/<directorio_usuario>/Proyecto_Bienvenida/ejemplos/basicos/HolaMundo.java
Y la compilación y ejecución sería:
$ cd /<directorio_usuario>/Proyecto_Bienvenida
$ javac ejemplos/basicos/Bienvenida.java
$ java ejemplos/basicos/Bienvenida
Hola Mundo
La Biblioteca de Clases de Java se organiza haciendo uso de esta jerarquía de paquetes. Así por ejemplo, si quiero acceder a la clase Date
, tendré que importarla indicando su ruta completa, o sea, java.util.Date.
Este tipo de instrucciones son añadidas de forma automática cuando utilizamos un IDE.
import java.util.Date;