Programmation Java/Encapsulation

Un livre de Wikilivres.

En Java, comme dans beaucoup de langages orientés objet, les classes, les attributs et les méthodes bénéficient de niveaux d'accessibilité, qui indiquent dans quelles circonstances on peut accéder à ces éléments.

Ces niveaux sont au nombre de 4, correspondant à 3 mots-clés utilisés comme modificateurs : private, protected et public. La quatrième possibilité est de ne pas spécifier de modificateur (comportement par défaut).

Les sections suivantes décrivent les modificateurs du plus restrictif au moins restrictif. Chaque modificateur moins restrictif que le précédent ajoute une nouvelle possibilité d'accès.

Modificateur "private"[modifier | modifier le wikicode]

Un attribut ou une méthode déclarée "private" n'est accessible que depuis l'intérieur de la même classe.

Comportement par défaut (paquetage)[modifier | modifier le wikicode]

Si aucun modificateur n'est indiqué, l'élément n'est accessible que depuis les classes faisant partie du même paquetage (package).

Exemple :

package org.wikibooks.fr.temps;

class Horloge
{
    // corps de la classe
}

public class Calendrier
{
    void ajouteJour()
    {
        // corps de la methode
    }

    int mois;

    // suite de la classe
}

La classe Horloge, la méthode ajouteJour et l'attribut mois ne sont accessibles que depuis les classes faisant partie du package org.wikibooks.fr.temps.

Modificateur "protected"[modifier | modifier le wikicode]

Un attribut ou une méthode déclarée "protected" est accessible uniquement aux classes d'un package et à ses sous-classes même si elles sont définies dans un package différent.

Si la classe qui accède au membre est dans un paquetage différent, elle doit être une sous-classe de la classe définissant le membre accédé. Toutefois, elle ne peut le faire que pour la référence this ou super ; elle ne peut pas accéder au membre d'un autre objet.

Exemple :

package org.wikibooks.fr.transport;

public class Vehicule
{
    protected int kilometrage = 0;
}
package org.wikibooks.fr.transport.route;

public class Voiture extends Vehicule
{
    public boolean estPlusUtiliséeQue(Voiture autre)
    {
        return this.kilometrage > autre.kilometrage;
        //     ^ OK               ^ Erreur
    }
}

Modificateur "public"[modifier | modifier le wikicode]

Une classe, un attribut ou une méthode déclarée "public" est visible par toutes les classes et les méthodes.

En résumé[modifier | modifier le wikicode]

Le tableau résume les différents mode d'accès des membres d'une classe.

Modificateur du membre private aucun protected public
Accès depuis la classe Oui Oui Oui Oui
Accès depuis une classe du même package Non Oui Oui Oui
Accès depuis une sous-classe Non Non Oui Oui
Accès depuis toute autre classe Non Non Non Oui