Aujourd'hui, nous apprendrons le contrôle des droits d'accès à Java. Avant de discuter du contrôle d'accès, discutons de la raison pour laquelle le contrôle d'accès est nécessaire. Considérez deux scénarios:
Scénario 1: L'ingénieur a écrit une classe Classa, mais l'ingénieur A ne veut pas que Classa soit accessible par d'autres classes utilisées dans l'application, alors comment devons-nous y faire face?
Scénario 2: Si l'ingénieur A écrit une classe Classa, qui a deux méthodes Fun1 et Fun2, l'ingénieur veut que Fun1 soit visible pour le monde extérieur. C'est-à-dire que si d'autres ingénieurs appellent Classa, ils ne peuvent appeler que la méthode Fun1, alors que devons-nous faire?
À l'heure actuelle, le contrôle d'autorisation d'accès peut jouer un rôle.
En Java, quatre types de contrôle des droits d'accès sont fournis: Droits d'accès par défaut (droits d'accès aux paquets), public, privé et protégé.
Notez que seules les autorisations d'accès par défaut et le public peuvent être utilisées pour modifier la classe pour les quatre types d'autorisations d'accès ci-dessus. Les quatre autorisations de la classe modifiée sont OK. (Les classes mentionnées dans cet endroit ciblent des classes externes, pas des classes internes)
Ce qui suit expliquera ces quatre contrôles de droits d'accès pour les membres de la classe de modification et la classe de modification.
1. Catégorie de modification
Autorisations d'accès par défaut (autorisations d'accès aux packages): si elle est utilisée pour modifier une classe, cela signifie que la classe n'est visible que pour les autres classes du même package.
Public: S'il est utilisé pour modifier une classe, cela signifie que la classe est visible pour toutes les autres classes.
Jetons un coup d'œil à la différence entre les deux à travers quelques exemples:
Exemple 1:
Main.java:
package com.cxh.test1; classe publique Main {/ ** * @param args * / public static void main (String [] args) {// TODO Méthode générée automatique Stub People = New People ("Tom"); System.out.println (People.GetName ()); }} People.java
package com.cxh.test1; classe People {// Permission d'accès par défaut (autorisation d'accès du package) Nom de chaîne privée = null; publics (nom de chaîne) {this.name = name; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; }}Comme on peut le voir à partir du code, la modification de la classe People utilise les autorisations d'accès par défaut, et comme la classe People et la classe principale sont dans le même package, la classe People est visible pour la classe principale.
Résultats du programme en cours d'exécution:
Exemple 2:
People.java
package com.cxh.test2; classe People {// Permission d'accès par défaut (autorisation d'accès du package) Nom de chaîne privée = null; publics (nom de chaîne) {this.name = name; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; }}Pour le moment, la classe People et la classe principale ne sont pas dans le même package. Que se passera-t-il?
Voici les erreurs provoquées dans la classe principale:
Il invite que la classe Peolple n'est pas visible dans la classe principale. À partir de cela, nous pouvons voir que si une classe est modifiée avec les autorisations d'accès par défaut, la classe n'est visible que par d'autres classes dans le même package et n'est pas visible pour les classes dans différents packages.
Comme indiqué dans l'invite de correction rapide dans la figure ci-dessus, si vous modifiez les autorisations d'accès par défaut de la classe People en public, la classe People sera visible pour la classe principale.
2. Méthodes et variables de la modification des classes
Autorisations d'accès par défaut (autorisations d'accès aux packages): Si les méthodes ou variables d'une classe sont modifiées par les autorisations d'accès aux packages, cela signifie que les méthodes ou variables de la classe ne peuvent être appelées que dans d'autres classes dans le même package, et que les méthodes ou variables de la classe ne peuvent pas être appelées affichées dans les classes dans différents packages.
Privé: Si les méthodes ou les variables d'une classe sont modifiées par privé, les méthodes ou variables de la classe ne sont accessibles que dans la classe elle-même et ne peuvent pas être affichées dans la classe ou dans d'autres classes.
Protégé: Si les méthodes ou les variables d'une classe sont modifiées par protégé, les méthodes ou variables de cette classe sont accessibles pour la même classe de package. Pour les classes avec différents packages, seules les classes héritées de cette classe peuvent accéder aux méthodes ou variables de cette classe.
public: les méthodes ou variables modifiées par le public sont visibles n'importe où.
Prenons quelques exemples pour voir les différences entre leurs méthodes et variables de classe portée:
Exemple 3:
Main.java n'a pas changé
People.java
package com.cxh.test1; classe publique People {private String name = null; publics (nom de chaîne) {this.name = name; } String getName () {// Permission d'accès par défaut (autorisation d'accès du package) Nom de retour; } void setName (String Name) {// Permission d'accès par défaut (autorisation d'accès du package) this.name = name; }}Pour le moment, les méthodes d'appel GetName et SetName peuvent être affichées dans la classe principale.
Mais si la classe People et la classe principale ne sont pas dans le même package:
package com.cxh.test2; // C'est dans un ensemble différent de la classe principale de classe publique {private String name = null; publics (nom de chaîne) {this.name = name; } String getName () {// Permission d'accès par défaut (autorisation d'accès du package) Nom de retour; } void setName (String Name) {// Permission d'accès par défaut (autorisation d'accès du package) this.name = name; }}À l'heure actuelle, une erreur sera invitée à la classe principale:
À partir de cela, nous pouvons voir que si l'autorisation d'accès par défaut est utilisée pour modifier les méthodes ou variables de la classe, ils ne peuvent être accessibles que dans d'autres classes du même package.
Exemple 4:
People.java
package com.cxh.test1; classe publique People {private String name = null; publics (nom de chaîne) {this.name = name; } String Protected getName () {Nom de retour; } protégé void setName (String name) {this.name = name; }}Pour le moment, vous pouvez afficher les méthodes d'appel getName et SetName dans Main.
Si la classe People et la classe principale sont dans différents packages:
package com.cxh.test2; classe publique People {private String name = null; publics (nom de chaîne) {this.name = name; } String Protected getName () {Nom de retour; } protégé void setName (String name) {this.name = name; }}Une erreur sera signalée dans la principale:
Si un homme de classe est spécifié dans com.cxh.test1 pour hériter des gens, vous pouvez afficher les méthodes d'appel getName et setName dans l'homme de classe:
package com.cxh.test1; import com.cxh.test2.People; La classe publique Man étend les gens {public man (String Name) {super (name); } public String toString () {return getName (); }}Voici quelques connaissances sur les packages Java et les fichiers de classe:
1) Les packages de Java sont principalement utilisés pour empêcher les conflits de dénomination des fichiers de classe et faciliter l'organisation et la gestion du code;
2) Pour un fichier de code source Java, s'il y a une classe publique, il ne peut y avoir qu'une seule classe publique, et le nom du fichier de code source doit être exactement le même que le nom de la classe publique. De plus, s'il existe d'autres classes, ces classes sont invisibles en dehors du package. Si le fichier de code source n'a pas de classe publique, le nom du fichier de code source peut être nommé comme il s'agit.
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.