Maison  >  Article  >  Java  >  Explication détaillée des modificateurs d'autorisation d'accès en Java avec des exemples

Explication détaillée des modificateurs d'autorisation d'accès en Java avec des exemples

高洛峰
高洛峰original
2017-01-24 15:36:292312parcourir

Symbole d'autorisation d'accès :
(1) public :
Pour les membres : toute autre classe peut y accéder, que ce soit dans le même package ou dans un autre package.
Pour les cours : il en va de même.
(2)friendly :
Quant aux membres, si les membres d'une classe n'ont aucune modification d'autorisation, alors ils ont les autorisations d'accès au package par défaut, qui sont représentées par friendly, note

convivial Ce n'est pas un mot-clé en Java, c'est juste la façon dont j'aime l'exprimer. Les autres classes du même package peuvent y accéder, mais

en dehors du package ne le peuvent pas. Pour les classes du même dossier qui n'utilisent pas de packages, Java verra automatiquement d'abord ces classes comme le package par défaut appartenant au répertoire

, et les membres amicaux de la classe peuvent s'appeler les uns les autres. Par exemple, les deux classes suivantes se trouvent dans deux fichiers

dans le même dossier. Bien qu'aucun package ne soit introduit, elles appartiennent au même package par défaut.

class Sundae{
//以下两个方法缺省为friendly
Sundae(){}
Void f() {System.out.println(“Sundae.f()”);
}
public class IceCream{
public static void main(String[] args){
Sundae x = new Sundae();
x.f();
}
}

Pour les cours : les cours du même package peuvent être utilisés. Bref, les cours ne peuvent être déclarés que publics ou conviviaux.
(3)privé :
Pour les membres : il n'est accessible que dans la classe à laquelle appartient le membre.

class Sundae{
   private Sundae(){}//只能在Sundae class中被调用
   Sundae(int i) {}
   static Sundae makASundae() {
   return new Sundae();
   }
   }
   public class IceCream{
   public static void main(String[] args){
   // Sundae class中构造函数Sundae()是private,
   // 所以不能用它进行初始化
   //Sundae x = new Sundae();
   Sundae y = new Sundae(1);//Sundae(int)是friendly,可以在此调用
   Sundae z = Sundae.makASundae();
   }
   }

Pour les cours : Les cours ne peuvent pas être déclarés privés.

(4)protected :
Pour les membres : les classes du même package peuvent accéder (les droits d'accès au package) accordent les droits d'accès des membres de la classe de base à la classe dérivée via protected, pas toutes les classes (accès aux classes dérivées).

(5)default (autorisation par défaut)
Les classes, les données membres, les constructeurs et les membres de méthode peuvent tous utiliser les autorisations par défaut, c'est-à-dire n'écrire aucun mot-clé. L'autorisation par défaut est l'autorisation dans le même package. Les éléments avec autorisation dans le même package ne peuvent être appelés que dans la classe dans laquelle ils sont définis et dans les classes du même package.

Exemple : package c05.local;

import pack1.Cookie;
//注意:在这里ChocolateChip继承了类Cookie,按道理bite()方法也在
//ChocolateChip中,可以用x.bite直接调用,但是不可以的,因为类ChocolateChip
//和Cookie类不在一个包中,各自具有包访问权限,为了能够使用x.bite()必须要把
//Cookie方法的访问权限换成public或者protected,但是一旦换成public所有的人就
//可以访问了,这样达不到隐私的要求,所以设置成protected最好,既可以顺利访问,也可以
//避免外面的类调用,保护好隐私的作用
public class ChocolateChip extends Cookie {
  
  public ChocolateChip() {
   System.out.println("ChocolateChip constructor");
  }
  public static void main(String[] args) {
   ChocolateChip x = new ChocolateChip();
   x.bite(); // Can't access bite
   
  }
} ///:~
package pack1;
 
public class Cookie {
public Cookie()
{
System.out.println("Cookie constructor");
}
 
protected void bite(){System.out.println("bite");}
 
}

Pour une classe : une classe ne peut pas être déclarée protégée

Pour une classe Modification des autorisations, il y a une meilleure explication ci-dessous :

Autorisations d'accès aux classes de classe :
public : accessible à toutes les classes.
Par défaut : La valeur par défaut peut être appelée conviviale. Cependant, il n'y a pas de modificateur convivial dans le langage Java. Ce nom doit provenir de c. Les autorisations d'accès par défaut sont des autorisations d'accès au niveau du package.
Autrement dit, si vous écrivez une classe sans écrire le modificateur d'autorisation d'accès, alors c'est l'autorisation d'accès par défaut, et toutes les classes du même package peuvent y accéder, même si la classe peut être instanciée
(Bien sûr , si cette classe n'a pas la possibilité d'instancier, par exemple, la classe ne fournit pas de constructeur public).

Remarque :
1. Chaque unité de compilation (fichier de classe) ne peut avoir qu'une seule classe publique
2. Le nom de la classe publique (y compris les majuscules et les minuscules) doit avoir le même nom que son fichier de classe.
3. La classe publique n'a pas besoin d'exister dans un fichier de classe (*.java).
Scénarios où ce formulaire existe : Si nous écrivons une classe dans un package, c'est simplement pour travailler avec d'autres classes dans le même package, et
Nous ne voulons pas écrire de documentation aux clients (pas nécessairement C'est un client réel, c'est peut-être une classe qui appelle cette classe), ce qui est angoissant à voir, et il est possible qu'après un certain temps
cela change complètement l'approche d'origine et abandonne complètement l'ancienne version et remplacez-la par une toute nouvelle version.
4. Le cours ne peut pas être privé ou protégé.
5. Si vous ne souhaitez pas qu'aucun objet d'une certaine classe soit généré, vous pouvez définir tous les constructeurs de la classe sur privés. Mais même de cette manière, les objets de cette classe peuvent être générés, c'est-à-dire que les membres statiques (propriétés et méthodes) de la classe peuvent le faire.

Exemple complet :
First.java :

package Number;
import Test.*;
  
public class Frist extends Test
{
protected String s1 = "你好";
public static void main( String[] args)
{
String s2 = "java";
//System.out.println(s1);
System.out.println(s2);
  
Frist t = new Frist();
System.out.println(t.s);
t.show();
return;
}
  
}
  
Test.java:
package Test;
  
  
public class Test 
{
protected String s = "hello test"; //可以被同包中的类访问以及子类访问,该子类可以是与包Test不同
public void show()
{
Test1 t1 = new Test1();
return;
}
  
  
}
  
class Test1
{
Test1()
{
Test t = new Test();
System.out.println(t.s);
}
}

Sortie :

java
hello test
hello test

Plus s'il vous plaît faites attention au site Web chinois PHP pour des articles connexes expliquant les modificateurs d'autorisation d'accès en Java avec des exemples !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn