Paquete e Importación y Conflictos de Nombres

Package:

Un package o "paquete" no es mas que un directorio de carpetas donde viven nuestras clases.

El package debe ser la primera sentencia del archivo fuente, no puede haber nada antes del package (salvo comentario o espacio en blanco). Cualquier clase que pertenezca al paquete OBLIGATORIAMENTE debe declarlo en primer lugar. La sintaxis es:

package com.dar10.nombre_paquete;

Donde "cada punto" crear un sub-directorio, visto como un explorar de archivos seria:"src\com\dar10\nombre_paquete\Clase.java"
La agrupación de clases en packages es conveniente desde el punto de vista organizativo, para mantener bajo una ubicación común clases relacionadas que cooperan desde algún punto de vista. También resulta importante por la implicación que los packages tienen en los modificadores de acceso

Import:

El import del inglés "importar" es una declaración que permite hacer uso de clases que se encuentren en otros paquetes, esto no es necesario cuando las clases se encuentran en el mismo paquete, es entonces que el import "le advierte" al compilador que tiene que usar esa "biblioteca" en particular. Es la segunda declaración de nuestro código fuente (sólo antecedida por el package, si es que existe).

  1. package com.dar10.comyr;
  2. import java.util.Scanner;
  3. import javax.swing.*;
  4.  
  5. public class importaciones{
  6.     java.awt.font text = new java.awt.font();
  7. }

Podemos importar solo una clase o un paquete completo con un asterisco (*) no hay diferencia en tamaño de velocidad al hacer esto y resulta útil cuando trabajamos con varias clases del mismo paquete.

  • import java.util.Scanner; <-- importar clase única
  • import java.util.*; <--importar paquete completo(clases: ArrayList, Calendar, Collections, Date, Random, Scanner, Timer, etc)

Sin embargo no podemos incluir varios sub-paquetes con el asterisco, dentro de java.util.*; existen varios paquetes y tendremos que importarlo aparte:

  • import java.util.concurrent.*
  • import java.util.concurrent.atomic.*
  • import java.util.concurrent.locks.*
  • import java.util.jar.*
  • import java.util.logging.*
  • import java.util.prefs.*
  • import java.util.regex.*
  • import java.util.spi.*
  • import java.util.zip.*

Conflicto de Nombres:

Puede habe clases con el mismo nombre pero en diferentes paquetes. A la hora de usarlos es necesario romper con la ambiguedad que se crea al tener el mismo identificador usando su nombre completo, es decir indicar a el paquete que pertenece. Esto también se puede usar con cualquier clase como un import explícito dentro de nuestro código sin declararlo con el import.

  • Date --> Package java.util.*;
  • Date --> Package java.sql.*;

Como se ve en la captura, mi IDE me advierte que "date" es ambiguo y necesito hacer un import explícito como hice correctamente abajo.

No hay comentarios:

Publicar un comentario