Si una clase A y una clase B se encuentran en diferentes paquetes, la clase A tiene un acceso default por lo que la clase B no podrá crear instancias de la clase A, o incluso declarar una variable o tipo de retorno de clase A. La clase B, simplemente no sabe que la clase A existe y si lo anterior sucede habrán errores de compilación.Miremos el siguiente archivo de código fuente:
package cert;
class Beverage{ }
Ahora veamos el segundo archivo de código fuente:
package exam.stuff;
import cert.Beverage;
class Tea extends Beverage{ }
Como podemos apreciar, la superclase Beverage está en diferente paquete de la subclase Tea. La sentencia import del segundo archivo intenta importar la clase Beverage. La clase Beverage compila, pero si intentamos compilar la clase Tea, nos saldrá el siguiente error de compilación:
Can't access class cert.Beverage. Class or interface must be public, in same package, or an accessible member class.Tea no compilará por que la superclase Beverage tiene un acceso default y se encuentra en diferente paquete. Para solucionar este problema, tenemos dos opciones: Poner ambas clases en el mismo paquete, o bien, cambiar el modificador de acceso de Beverage a public.
import cert.Beverage;