certification java

OCPJP 6 – Jour 2 – Classe Java : Déclaration et niveau d’accès

Une classe est une description d’un ensemble d’objets ayant une structure de données commune et disposant des mêmes méthodes. Les objets apparaissent alors comme des variables d’un tel type classe (on dit qu’un objet est une instance d’une classe). Seule la structure est commune, les valeurs des champs étant propres à chaque objet.

Dans ce chapitre, nous allons détailler les différentes règles associées à la déclaration d’une classe et les modificateurs permettant l’accès à une telle classe.

2.1 – Règles de déclaration dans les fichiers sources

  • Il ne peut y avoir qu’une seule classe publique (public) par fichier code source .java. Un fichier code source peut cependant contenir à la fois un classe publique et plusieurs classes non publiques.
  • Les commentaires ne doivent apparaître qu’au début ou qu’en fin de ligne.
  • Si un fichier code source possède une classe publique, celui-ci doit obligatoirement être nommé comme la classe. Ex : une classe publique déclarée de cette façon : public class Car {} doit être dans un fichier nommé Car.java. Si un fichier code source ne contient aucune classe publique, il n’est pas obligatoire que le nom du fichier corresponde au nom d’une des classes non publiques.
  • Si la classe appartient à un package, l’instruction package doit apparaître en première ligne du fichier code source.
  • Si la classe contient des imports, les instructions import doivent apparaître entre l’instruction package et l’instruction class. Si le fichier source ne contient pas d’instruction package, les instructions import doivent apparaître en premières lignes. De plus si le fichier code source ne contient ni l’instruction package, ni l’instruction import, l’instruction class doit apparaître en première ligne.
  • Les instructions package et import s’appliquent à l’ensemble des classes du fichier code source. En d’autres termes, il n’y a aucun moyen de déclarer plusieurs classes appartenant à des packages différents ou utilisant des imports différents.

2.2 – Les modificateurs de classe

En Java, la déclaration d’une classe, d’une méthode ou d’un membre peut être précédée par un modificateur. Ces modificateurs peuvent être regroupés en deux catégories :

  • Modificateurs d’accès : public, protected et private
  • Autres modificateurs : strictfp, final et abstract

Les modificateurs d’accès

Il existe 4 niveaux d’accès pour 3 modificateurs (public, protected et private). En effet le 4ème niveau est celui par défaut, utilisé lorsque aucune des 3 instructions précédentes n’est utilisée :

  • public : accessible partout et dans n’importe quel package (sous réserve d’importer le package si cette classe publique que l’on souhaite utiliser se trouve dans un package différent)
  • (default) : accessible uniquement par des classes de même package. Soit la classe mère Aircraft et sa classe fille Plane déclarés dans deux packages différents :

    La compilation du fichier Plane.java générera les erreurs suivantes :

    Pour que le code précédent soit valide, il est nécessaire de placer les deux classes dans un même package :
  • private : seule une classe interne peut être définie comme private et celle-ci est inaccessible en dehors de la classe englobante où celle-ci est définie :
  • protected : une classe définie comme protected a le même comportement qu’une classe privée à une particularité près, celle-ci reste accessible via héritage :

Les autres modificateurs

Il est possible de combiner ces modificateurs avec des modificateurs d’accès. Ainsi il est tout à fait envisageable de déclarer une classe public et final. Cependant il n’est pas toujours possible de combiner ces modificateurs, comme par exemple de déclarer une classe à la fois final et abstract car ces deux modificateurs ont des actions totalement contradictoires. Nous allons voir pourquoi :

  • final : une classe final ne peut être dérivée. Ce modificateur permet notamment de sécuriser vos classes en empêchant quiconque de les utiliser de façon inappropriée dans une quelconque classe dérivée. De nombreuses classes de la bibliothèque standard Java sont déclarées comme final tel que java.lang.System ou java.lang.String.
    Reprenons nos classes Aircraft et Plane

    Le fichier Plane.java génèrera les erreurs suivantes à la compilation :
  • abstract : une classe abstraite ne peut être instanciée. Sa seule raison d’être est d’être dérivée. Considérons la classe abstraite suivante :

    Ce code est correct et ne provoquera pas d’erreurs de compilation. Cependant si vous tentez d’instancier cette classe :

    Lors de la compilation, vous obtiendrez l’erreur suivante :

Vou ne pouvez donc déclarer une classe à la fois final et abstract car ces modificateurs ont des sens diamétralement opposés. La raison d’être d’une classe déclarée abstract est d’être dérivée, or une classe déclarée final ne peut l’être.

  • strictfp : un processeur de virgule flottante peut effectuer des calculs avec plus de précision et une plus grande plage de valeurs que ce que requiert la spécification Java. Le mot-clé strictfp peut être utilisé avec des classes ou des méthodes afin de spécifier la conformité avec la spécification Java (IEEE-754) et ainsi obtenir des résultats flottants identiques d’un environnement à l’autre. Si ce mot clé n’est pas défini, les calculs à virgule flottante peuvent varier d’un environnement à l’autre.


Auteur
AuteurEdouard WATTECAMPS

0 réponses

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *