DaniMir, he preparado este ejemplo para que notes la diferencia muy notoria entre el identificador "Public" y el no poner ningún modificador, que por cierto, me entere que a este ultimo caso le llaman "acceso de paquete" (Y ya notaras porque la llaman así):
Supongamos que tengas un proyecto, y en ese proyecto tengas 2 paquetes (o package) creados en el
![](http://i.imgur.com/UvHXzfL.png)
Como ves, el paquete "ASDf" contiene dos clases (SoyLink y SoyMario) mientras que el paquete "Nuevo" solo tiene una clase (Main). Ahora, en ambas clases vamos a definir 1 solo atributo, un método (setter) y una función (getter).
En la clase "SoyLink", vamos a definir el setter como publico... mientras que el getter, asignemoslo como un acceso de paquete.
![](http://i.imgur.com/PnBwwZg.png)
En la clase "SoyMario", simplemente asignamos ambos como public.
![](http://i.imgur.com/npv4IQI.png)
Ahora vamonos al otro paquete "Nuevo", abrimos la clase Main donde creamos un vulgar método main y aquí viene lo interesante...
![](http://i.imgur.com/Qce9UdH.png)
De la instancia de la clase "SoyLink" solo puedo acceder solamente al setter que definimos como public... mientras que el getter brilla por su ausencia (getNombre).
Y si probamos con la otra clase "SoyMario"?
![](http://i.imgur.com/nBWKX3E.png)
Mira que de esta instancia si puedo acceder al setter y al getter, pues porque ambas estan definidas como
public.
Aquí la diferencia... si no le asignas un modificador de acceso te veras forzado a
solo utilizar dicho elemento dentro del paquete, mientras que con un public,
puedes utilizarlo fuera y dentro del paquete al que pertenece.
En cuanto al modificador private, así como has dicho trabaja. Solo se puede utilizar dentro de la clase. . . hay otro mas que se llama
protected, pero este lo vas a comprender mucho mejor cuando llegues a la parte de herencia en el curso.
Salu2!!