L'encapsulation est un concept fondamental de la programmation orientée objet en fournissant aux classes l'entière responsabilité de la représentation interne de leurs propres données tout en autorisant la manipulation de ces dernières par des méthodes spéciales dites d'accés.

Les méthodes d'accès, appelées accesseur (getter) ou mutateur (setter), fournissent une interface publique permettant de manipuler les membres encapsulés, c'est-à-dire ceux possédant un modificateur d'accès private à partir d'autres classes.

  • Les accesseurs permettent d'accéder à des membres privés.
  • Les mutateurs permettent de modifier des membres privés.

La méthode dite accesseur, permettant de retourner la valeur d'un membre privé, doit avoir comme type de retour, le spécificateur de type de la variable à renvoyer.

Par ailleurs, l'accesseur, en général, ne nécessite pas d'arguments et doit toujours posséder un modificateur publique.

public TypeVariable getNomVariable()
{...}

public class UneClasse {
  public static void main(String[] argv){
    AutreClasse obj = new AutreClasse();
    int nb_AC = obj.getNombre();
  }
}

class AutreClasse {
  private int nombre;
  public int getNombre(){
    return nombre;
  }
}

Une méthode dite mutateur, permettant la modification de la valeur d'un membre privé, doit posséder un paramètre correspondant à la valeur à affecter au membre concerné. En outre, le paramètre doit avoir le même type que le membre privé.

D'autre part, le mutateur, en général, ne retourne pas de valeur et doit toujours posséder un modificateur publique à l'instar de l'accesseur.

public void setNomVariable(TypeVariable ValeurVariable)
{...}

public class UneClasse {
  public static void main(String[] argv){
    AutreClasse obj = new AutreClasse();
    int nouv_nb = 100;
    obj.setNombre(nouv_nb);
  }
}

class AutreClasse {
  private int nombre;
  public void setNombre(int nouveau_nombre){
    nombre = nouveau_nombre;
  }
}

Par convention, il est préférable de nommer spécifiquement les méthodes en les faisant précéder du préfixe get pour un accesseur et du préfixe set pour un mutateur comme dans les exemples précédents.

Si la représentation interne de la classe subit des modifications, c'est-à-dire si les données sont modifiées comme le type ou l'identificateur d'un membre concerné, il est impérativement nécessaire de répercuter les éventuels changements au niveau des méthodes d'accès.

public class UneClasse {
  public static void main(String[] argv){
    AutreClasse obj = new AutreClasse();
    int nouv_nb = 100;
    obj.setNombre(nouv_nb);
    int nb_AC = obj.getNombre();
  }
}

class AutreClasse {
  private int nb_personnels;
    public int getNombre(){
    return nb_personnels;
  }

  public void setNombre(int nouveau_nombre){
    nb_personnels = nouveau_nombre;
  }
}

Les modifications apportées à la classe encapsulée ne peuvent et souvent ne doivent avoir aucun effet sur son utilisation par d'autres classes devant continuer à fonctionner correctement, à condition de ne pas toucher les identificateurs des méthodes d'accès et de vérifier la compatibilité des types des variables, paramètres et arguments concernés.