Pourquoi le mécanisme de contrôle d'accès est-il conçu en Java? Il y a deux fonctions principales:
(1) Pour que les utilisateurs évitent de toucher les pièces qu'ils ne devraient pas toucher, ces pièces sont nécessaires pour les opérations internes, mais elles ne font pas partie de l'interface requise par le programmeur client.
(2) Afin de permettre aux concepteurs de bibliothèques de classe de modifier le fonctionnement interne des classes sans se soucier d'avoir un impact significatif sur les utilisateurs.
Le niveau de contrôle d'autorisation d'accès en Java est:
Public -> Protected -> Accès du package (pas de modificateur d'autorisation) -> Private.
1. Package
Le concept de packages en Java est très similaire au concept d'espaces de noms en C ++, et les deux peuvent limiter la portée des classes. La plus grande différence entre les deux est que les packages de Java indiquent implicitement la hiérarchie des arbres de la classe (ainsi que la structure du répertoire du fichier de code source Java). L'avantage de cela est que l'unicité de la classe peut être limitée par les exigences pour l'unicité du chemin du fichier dans le système de fichiers.
1. Organisation du code
Lors de la rédaction d'un fichier de code source Java (fichier .java), ce fichier est généralement appelé unité de compilation. Au maximum, une classe publique est autorisée dans l'unité de compilation, et le nom de la classe doit être exactement le même que le nom de fichier (y compris la partie supérieure et les minuscules).
Lors de la compilation d'un fichier .java, chaque classe du fichier .java aura un fichier de sortie .class, et le nom de fichier et le nom de la classe sont les mêmes. Un programme Java Runnable est un ensemble de fichiers .class qui peuvent être emballés et compressés dans un fichier de document Java (package JAR, en utilisant le générateur de documents JAV de Java). L'interprète Java est responsable de la recherche, du chargement et de l'interprétation de ces fichiers.
Une bibliothèque de classe est en fait un ensemble de fichiers de classe. Chaque fichier .java est autorisé à avoir au plus une classe publique, ainsi que n'importe quel nombre de classes non publiques. Par conséquent, chaque fichier a un artefact. Si vous souhaitez organiser ces composants (chaque build a un fichier .java et plusieurs fichiers .class) pour former différents groupes, vous pouvez utiliser le package de mots clés en Java.
2. La fonction du package
(1) Organisez des classes ou des interfaces avec des fonctions similaires ou connexes dans le même package pour faciliter la recherche et l'utilisation des classes.
(2) Comme les dossiers, les packages utilisent également des répertoires en forme d'arbres pour les stocker. Les noms de classe du même package sont différents et les noms des classes dans différents packages peuvent être les mêmes. Lorsque des cours avec le même nom de classe dans deux packages différents sont appelés en même temps, le nom du package doit être ajouté pour les distinguer. Par conséquent, le package peut éviter les conflits de noms.
(3) Les packages limitent également les droits d'accès. Seules les classes avec les droits d'accès aux packages peuvent accéder aux cours dans un package.
3. Créez un package
Dans Java, utilisez le mot clé du package pour spécifier le package (espace de noms) auquel appartient le code.
Format de syntaxe:
Package PKG1 [. pkg2 [. pkg3…]];
Note:
(1) Le nom du package souligne implicitement la structure du répertoire du code.
(2) Le nom de classe publique (également le nom de fichier Java) dans le même répertoire doit être unique.
(3) La déclaration de package doit être sur la première ligne du fichier source. Chaque fichier source ne peut avoir qu'une seule déclaration de package, et chaque type dans ce fichier y est appliqué.
(4) Si un fichier source n'utilise pas de déclaration de package, les classes, les fonctions, les énumérations, les commentaires, etc. dans ce seront placées dans un package sans nom.
(5) Les noms des packages sont généralement en lettres minuscules.
Par exemple:
Vérifiez le code source de la classe java.util.arraylist et vous pouvez voir que la première ligne du fichier est:
Package Java.util;
Sa structure de répertoire de code est java / util / arraylist.java
4. Package d'importation
Dans Java, utilisez le mot-clé d'importation pour importer des packages.
Format de syntaxe:
IMPORT Package1 [.Package2…]. (ClassName | *);
exemple:
Prenons un exemple java.util.arraylist. Il est très gênant de l'utiliser d'une manière qui a un chemin complet.
java.util.arraylist <string> list = new java.util.arraylist <string> ();
Si vous souhaitez omettre le chemin précédent, vous pouvez utiliser le mot clé d'importation.
import java.util.arraylist;
Après l'importation du package dans le fichier, le code précédent qui déclare la liste peut être simplifié comme suit:
ArrayList <string> list = new ArrayList <string> ();
2. Modificateurs de droits d'accès
1. Package: autorisation d'accès aux forfaits
Si aucun modificateur d'accès n'est fourni, cela signifie qu'il s'agit d'accès aux packages.
L'accès par défaut n'a pas de mots clés, mais il se réfère généralement à l'accès des packages (parfois également exprimé comme amical, un peu comme le concept d'éléments d'amis en C ++). Cela signifie que toutes les autres classes du package peuvent accéder à ce membre ou à ce membre, mais toutes les classes en dehors de ce package ne sont pas accessibles.
exemple:
com.notes.packages.test.info
package com.notes.packages.test; publicClass info {void print () {System.out.println ("méthode par défaut - print ()"); }}com.notes.packages.test.publicdemo01
package com.notes.packages.test; publicClass publicDemo01 {publicStaticVoid main (String [] args) {info x = new info (); x.print (); }}PublicDemo01 et Info peuvent accéder à la méthode d'info de niveau par défaut - print () sous le même package.
com.notes.packages.publicdemo02
package com.notes.packages; import com.notes.packages.test.info; publicClass publicDemo02 {publicStaticVoid main (String [] args) {info x = new info (); // x.print (); // Erreur }}PublicDemo02 et les informations ne sont pas dans le même package, et la méthode du niveau d'autorisation d'accès aux packages d'Ino ne peut pas être consultée - print ().
2. Public: Autorisations d'accès à l'interface
L'utilisation du mot-clé public signifie que le membre ou la méthode déclarée est accessible à tous.
Exemple: Si l'autorisation de la méthode print () dans l'exemple d'autorisation de niveau par défaut est définie sur public, PublicDemo02 est accessible.
package com.notes.packages.test; publicClass info {publicVoid print () {System.out.println ("Méthode publique - print ()"); }}3. Private: Impossible d'accéder
L'utilisation du mot-clé privé signifie que le membre ou la méthode déclarée est inaccessible à toute autre classe sauf cette classe.
Scénario d'application: mode singleton
4. Protégé: Autorisations d'accès hérité
Une nouvelle classe (appelée classe d'enfants ou une classe dérivée) peut réutiliser une classe existante (appelée classe parent ou une classe de base) par l'héritage, puis étendre les membres et les méthodes de la classe de base. Parfois, le créateur d'une classe de base voudra qu'un membre spécifique attribue son accès à la classe dérivée au lieu de toutes les classes. Le public ne peut pas le faire, et à cette fin, protégée a été introduite pour faire le travail. Protected fournit également un accès aux packages, c'est-à-dire des classes dérivées et d'autres classes dans le même package peuvent accéder aux membres ou méthodes protégés.
Exemple: Une fois la sous-classe héritée de la classe parent, il peut accéder aux membres protégés de la classe parent.
classe Père {chaîne privée a = "privé"; String protégé b = "protégé"; String public c = "public";}; Class Son étend père {publicVoid print () {// system.out.println ("élément a:" + super.a); // Error System.out.println ("Element B:" + Super.B); System.out.println ("Element C:" + Super.C); }} publicClass ProtectedDemo01 {publicStaticVoid main (String args []) {Son sub = new Son (); sub.print (); }};Notes sur les modificateurs d'accès
Dans les exemples précédents, les membres et les méthodes de la classe peuvent être modifiés avec divers modificateurs d'autorisation.
De plus, il y a des points auxquels faire attention:
(1) L'utilisation des modificateurs d'autorisation pour les membres statiques et les méthodes statiques est la même que celle des membres et des méthodes ordinaires.
(2) Bien que la classe puisse également être modifiée par les modificateurs, les deux mots rhétoriques d'autorisation privés et protégés ne peuvent pas être utilisés.
(3) Dans certains livres, l'accès aux packages est également appelé accès par défaut. Personnellement, je ne recommande pas de mémoriser de cette façon, car cela est facilement confondu avec la nouvelle fonctionnalité de Java SE8 - le mot-clé par défaut. Ce mot-clé ne peut être utilisé que pour l'interface, et sa fonction est de permettre aux programmeurs de définir l'implémentation par défaut des interfaces dans l'interface (dans les versions JDK passées, vous ne pouvez pas seulement déclarer des méthodes dans l'interface).
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.