Heim  >  Artikel  >  Java  >  Ausführliche Erläuterung der Zugriffsberechtigungsmodifikatoren in Java anhand von Beispielen

Ausführliche Erläuterung der Zugriffsberechtigungsmodifikatoren in Java anhand von Beispielen

高洛峰
高洛峰Original
2017-01-24 15:36:292333Durchsuche

Zugriffsberechtigungssymbol:
(1) öffentlich:
Für Mitglieder: Jede andere Klasse kann darauf zugreifen, egal ob im selben Paket oder in einem anderen Paket.
Für den Unterricht: Das Gleiche gilt.
(2)freundlich:
Wenn die Mitglieder einer Klasse keine Berechtigungsänderung haben, verfügen sie über die Standardpaketzugriffsberechtigungen, die durch freundlich dargestellt werden, beachten Sie

freundlich Es ist kein Schlüsselwort in Java, es ist einfach die Art und Weise, wie ich es gerne ausdrücke. Andere Klassen im selben Paket können darauf zugreifen,

außerhalb des Pakets jedoch nicht. Bei Klassen im selben Ordner, die keine Pakete verwenden, erkennt Java diese Klassen automatisch zuerst als Standardpaket, das zum Verzeichnis

gehört, und befreundete Mitglieder in der Klasse können sich gegenseitig anrufen. Die folgenden zwei Klassen befinden sich beispielsweise in zwei Dateien

im selben Ordner. Obwohl kein Paket eingeführt wird, gehören sie zum selben Standardpaket.

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();
}
}

Für Kurse: Kurse im gleichen Paket können verwendet werden. Kurz gesagt, Klassen können nur als öffentlich oder freundlich deklariert werden.
(3)privat:
Für Mitglieder: Es kann nur in der Klasse darauf zugegriffen werden, zu der das Mitglied gehört.

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();
   }
   }

Für Kurse: Kurse können nicht als privat deklariert werden.

(4)protected:
Für Mitglieder: Klassen im selben Paket können darauf zugreifen (Paketzugriffsrechte); die Basisklasse gewährt den Mitgliedern in der Basisklasse Zugriffsrechte auf die abgeleitete Klasse durch protected, nicht alle Klassen (abgeleiteter Klassenzugriff).

(5)default (Standardberechtigung)
Klassen, Datenmitglieder, Konstruktoren und Methodenmitglieder können alle Standardberechtigungen verwenden, dh keine Schlüsselwörter schreiben. Die Standardberechtigung ist dieselbe Paketberechtigung. Elemente mit derselben Paketberechtigung können nur in der Klasse aufgerufen werden, in der sie definiert sind, und in Klassen im selben Paket.

Beispiel: Paket 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");}
 
}

Für eine Klasse: Eine Klasse kann nicht als geschützt deklariert werden

Für eine Klasse Berechtigungsänderung, unten gibt es eine bessere Erklärung:

Klassenklassenzugriffsberechtigungen:
Öffentlich: Alle Klassen können darauf zugreifen.
Standard: Der Standardwert kann freundlich genannt werden. In der Java-Sprache gibt es jedoch keinen freundlichen Modifikator. Die Standardzugriffsberechtigungen sind Zugriffsberechtigungen auf Paketebene.
Das heißt, wenn Sie eine Klasse schreiben, ohne den Zugriffsberechtigungsmodifikator zu schreiben, ist dies die Standardzugriffsberechtigung, und alle Klassen unter demselben Paket können darauf zugreifen, auch wenn die Klasse instanziiert werden kann
(Natürlich , wenn diese Klasse nicht über die Fähigkeit zur Instanziierung verfügt (z. B. stellt die Klasse keinen öffentlichen Konstruktor bereit).

Hinweis:
1. Jede Kompilierungseinheit (Klassendatei) kann nur eine öffentliche Klasse haben
2. Der Name der öffentlichen Klasse (einschließlich Groß- und Kleinschreibung) muss denselben Namen haben wie seine Klassendatei.
3. Die öffentliche Klasse muss nicht in einer Klassendatei (*.java) vorhanden sein.
Szenarien, in denen diese Form existiert: Wenn wir eine Klasse in ein Paket schreiben, dient sie nur dazu, mit anderen Klassen im selben Paket zusammenzuarbeiten, und
Wir möchten keine Dokumentation für Kunden schreiben (nicht unbedingt). ein echter Kunde, es kann eine Klasse sein, die diese Klasse aufruft), was nervenaufreibend zu sehen ist, und es ist möglich, dass es nach einer gewissen Zeit
den ursprünglichen Ansatz komplett ändert und den alten komplett aufgibt Version und ersetzen Sie sie durch eine brandneue Version.
4. Der Unterricht darf nicht privat oder geschützt sein.
5. Wenn Sie nicht möchten, dass Objekte einer bestimmten Klasse generiert werden, können Sie alle Konstruktoren der Klasse auf privat setzen. Aber auch auf diese Weise können Objekte dieser Klasse generiert werden, das heißt, die statischen Mitglieder (Eigenschaften und Methoden) der Klasse können dies tun.

Umfassendes Beispiel:
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);
}
}

Ausgabe:

java
hello test
hello test

Mehr bitte Achten Sie auf die chinesische PHP-Website für verwandte Artikel, in denen die Zugriffsberechtigungsmodifikatoren in Java anhand von Beispielen erläutert werden!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn