MODIFICADORES DE ACCESO
Entremos al "NetBeans":
Crearemos 2 paquetes; uno de ellos va 2 clases y el otro en un paquete, asi:
En la clase1 por defecto hay un modificador:
package Paquete1;
public class Clase1 {
int atributo1;
}
en la clase2 crearemos un objeto, así:
package Paquete1;
public class Clase2 {
public static void main (String[] args){
Clase1 objeto1 = new Clase1();
objeto1.atributo1 = 15;
}
}
Por el momento no hay error (si copiamos y pegamos) por que clase1 y clase2 están en el mismo paquete (package); ahora crearemos un objeto en la clase 3, pero si hacemos esto, nos marcaría error porque clase 3 y clase 1 estan en diferentes paquetes y para eso importaremos así:
package Paquete2;
import Paquete1.Clase1;
public class Clase3 {
public static void main (String[] args){
Clase1 objeto1 = new Clase1();
objeto1.atributo1 = 15;
}
}
por el momento no nos esta marcando un error pero si queremos llamar al "atributo1" : objeto1.atributo1 = 15; nos marcaria error porque como se ha mencionado en la clase 1 por defecto hay un modificador y solo es para ese paquete, y como solucionarlo? pues ir a la clase1 en donde dice: int atributo1; añadir "public" y quedaria asi: public int atributo1; listo ya no marcaria error. Ahora si en vez de "public" escribimos "private" que pasaria? Marcaria un error en la clase3 y tambien en la clase2; pero porque en la clase2, si pertenece al mismo paquete? el "private" lo que hace es restringir el atributo1 y solo puede ser utilizado por métodos en la misma clase.
ENCAPSULAMIENTO
Que hace el encapsulamiento?
Para hacer el encapsulamiento usaremos los métodos accesores que son los Setters y los Getters. en el encapsulamiento los Setters (set) establecemos la variable y con los Getters (get) mostraremos la varibale un ejemplo:
package Paquete1;
public class Clase1 {
private int edad;
private String nombre;
//Con el Set establecemos la edad y el get mostramos la edad
public void SetEdad(int edad){
this.edad = edad;
}
public int GetEdad(){
return edad;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
Esa es la forma de encapsular, ahora si queremos establecer la edad escribir public void y para mostrar con el public int (depende del tipo de dato que tiene el atributo, en esta casi la edad es de int y por lo tanto le asignamos el public int)
Ahora vamos al método main:
public static void main (String[] args){
Clase1 objeto1 = new Clase1();
objeto1.SetEdad(10);
System.out.println("La edad es: "+objeto1.GetEdad());
}
}
Crearemos el objeto y llamamos a método setEdad(estableciendo un numero) y luego imprimimos para llamar al getEdad solo escribir: ".."+objeto1.GetEdad()); y listo.