In Java hat alles eine Art Zugangskontrolle.
Die Kontrollstufen der Zugriffsberechtigungen sind von den größten bis zum Minimum: öffentlich, geschützt, Paketzugriffsberechtigungen (keine Schlüsselwörter) und privat.
Bei Verwendung werden die öffentlichen, geschützten und privaten Java -Zugriffsmodifikatoren vor jeder Definition (Domäne oder Methode) in der Klasse platziert.
1. Zugriffsrechte der Klassenmitglieder
Die einzige Möglichkeit, Zugang zu einem Mitglied zu erhalten, ist:
1). Machen Sie dieses Mitglied öffentlich. Egal wer ist, auf das Mitglied kann zugegriffen werden.
2). Zugriff auf den Paket zu den Mitgliedern durch unadressive Modifikatoren und das Platzieren anderer Klassen im selben Paket, und andere Klassen im Paket können auf das Mitglied zugreifen.
3). Geerbte Klassen können sowohl auf öffentliche als auch geschützte Mitglieder zugreifen.
4). Geben Sie Accessor- und Mutatormethoden zur Verfügung, um numerische Werte zu lesen und zu ändern.
1. Paketzugriffsberechtigungen
Die Standard -Zugriffsberechtigung verfügt nicht über Schlüsselwörter, der Pass bezieht sich jedoch auf Packungszugriffsberechtigungen, was bedeutet, dass alle anderen Klassen im aktuellen Bericht Zugriff auf dieses Mitglied haben, aber für alle Klassen außerhalb dieses Pakets ist dieses Mitglied tatsächlich privat.
Der Paketzugriff kombiniert alle relevanten Klassen innerhalb des Pakets, damit sie problemlos miteinander interagieren können.
Hinweis: Wenn sich die beiden Klassen im selben Verzeichnis befinden und keinen Paketamen für sich selbst festlegen, betrachtet Java automatisch solche Dateien als das Standardpaket, das dem Verzeichnis angeschlossen ist, sodass diese Dateien Paketzugriff aufeinander haben.
Das folgende Beispiel zeigt dieses Problem:
// Klassenkuchen und Kuchen befinden sich im selben Verzeichnis und werden in keiner Packungsklasse -Kuchen ausdrücklich angezeigt. }} class Cake {public static void main (String [] args) {pie x = new pie (); xf (); }} // Die Ausgabe ist pie.f ()2.Public: Schnittstellenzugriffsberechtigungen
Die Verwendung des Keyword -Publikums bedeutet, dass nachfolgende Mitgliedererklärungen allen verfügbar sind, insbesondere für Kundenprogrammierer, die Klassenbibliotheken verwenden.
3.privieren: Sie können nicht darauf zugreifen
Das Keyword Private gibt an, dass keine andere Klasse als die Klasse, die das Mitglied enthält, nicht auf das Mitglied zugreifen kann. Andere Klassen im selben Paket können nicht auf die privaten Mitglieder dieser Klasse zugreifen. Dies ist gleichbedeutend mit der Isolierung.
Diese Funktion des privaten Schlüsselworts enthält viele Verwendungszwecke, z. B. die Steuerung der Erstellung von Objekten und verhindern, dass andere direkt auf einen bestimmten Konstruktor (oder alle Konstruktoren) zugreifen. sehen
Das folgende Beispiel:
Klasse Sundae {private sundae () {} statische Sundae makeasundae () {return New Sundae (); }} public class icecream {public static void main (String [] args) {sundae x = sondae.makeasundae (); }}In diesem Beispiel können wir Sundae -Objekte erstellen, indem wir Makeasundae () -Methode aufrufen, aber wir können sie nicht über den Konstruktor erstellen.
Dies gilt auch für private Felder in der Klasse.
Eine Sache zu beachten ist jedoch, dass Sie nicht glauben können, dass andere Objekte keine öffentlichen Verweise auf das Objekt haben können, nur weil der Verweis auf ein Objekt in der Klasse privat ist.
4.geschützt: Erben Zugriffsberechtigungen
Wenn ein neues Paket erstellt wird und die Klasse von einem anderen Paket erbt, ist das einzige Mitglied, auf das zugegriffen werden kann, das öffentliche Mitglied des Quellpakets.
Manchmal möchte der Schöpfer einer Basisklasse eher der abgeleiteten Klasse als allen Klassen Zugriff auf ein bestimmtes Mitglied zuweisen, was das geschützte Schlüsselwort erfordert.
Beachten Sie, dass Protected auch Paketzugriff bietet, dh andere Klassen innerhalb desselben Pakets können auch auf geschützte Elemente dieser Klasse zugreifen.
2. Schnittstelle und Implementierung
Die Kontrolle der Zugriffsrechte wird häufig in konkreten Implementierungen als versteckt bezeichnet.
Verpackungsdaten und -methoden in Klassen und das Ausblenden spezifischer Implementierungen werden häufig gemeinsam als Kapselung bezeichnet.
Aus zwei wichtigen Gründen liegt der Zugriff auf die Berechtigungsregelung die Grenzen der Berechtigungen im Datentyp:
1. Stellen Sie die Grenzen ein, die Client -Programmierer verwenden können und können nicht verwenden. Sie können Ihren eigenen internen Mechanismus in der Struktur festlegen, ohne sich Sorgen zu machen, dass Kundenprogrammierer den internen Mechanismus versehentlich als Teil der von ihnen verwendeten Schnittstelle behandeln.
2. Trennen Sie die Schnittstelle und spezifische Implementierung.
3.. Klassenzugriffsberechtigungen
In Java können auch Zugriffsmodifikatoren verwendet werden, um zu bestimmen, welche Klassen in der Bibliothek dem Benutzer der Bibliothek zur Verfügung stehen.
Modifikatoren müssen vor der Keyword -Klasse platziert werden. Zum Beispiel:
Öffentliche Klasse Widget {......} oder
verbessern access.widget;
Sie sollten wissen, dass eine Klasse nicht privat sein kann (wenn die Klasse privat ist, kann keine andere Klasse außer der Klasse zugreifen) und sie kann auch nicht geschützt werden (tatsächlich kann eine interne Klasse privat oder geschützt werden. Dies ist jedoch ein Sonderfall, wie in nachfolgenden Artikeln beschrieben) und kann nur Berechtigungen oder öffentliche Packungszugriffsberechtigungen oder öffentlich sein.
Wenn Sie nicht möchten, dass andere auf die Klasse zugreifen, können Sie alle Konstruktoren der Klasse als privat angeben und verhindern, dass jemand Objekte der Klasse erstellt. Es gibt jedoch Ausnahmen, die Sie nicht daran hindern können, die Klasse innerhalb des statischen Mitglieds der Klasse zu erstellen. Schauen wir uns das folgende Beispiel an:
class sup1 {private ups sup1 () {} public static sups makesoup () {// Erstellen Sie ein Objekt mit einer statischen Methode zurück, neue Suppe1 (); }} class upsup2 {private upsup2 () {} private statische Suppe2 ps1 = new upsup2 (); // Erstellen Sie ein Objekt mit dem Singleton -Modus public static sups access () {return ps1; } public void f () {}} public Class Lunch {void testPrivate () {// ups up1 supsup = new supersuup1; Kann nicht ausgeführt werden} void testSingleton () {upscr2.access (). F (); }}Wir können sehen, dass die Konstruktoren von Suppe1 und Suppe2 beide privat sind und niemand den Konstruktor direkt verwenden kann, um Objekte dieser Klasse zu erstellen. Wir können aber auch diese beiden Klassen verwenden: Erstellen Sie eine statische Methode in Suppe1, verwenden Sie den Konstruktor, um ein SOUP1 -Objekt zu erstellen und seine Referenz zurückzugeben. Die Schaffung von Suppe2 verwendet das Singleton -Muster im Designmuster und kann nur eines seiner Objekte erstellen. Das Objekt der SOUP2 -Klasse wird als statisches Privatmitglied von Suppen2 erstellt, sodass nur eine zugegriffen werden kann, es sei denn, auf die öffentliche Methode zugegriffen wird.
Darüber hinaus sind einige Einschränkungen erwähnenswert:
1. Jede Kompilierungseinheit kann nur eine öffentliche Klasse haben.
2. Der Name der öffentlichen Klasse muss genau mit dem Dateinamen übereinstimmen, der die Kompilierungseinheit enthält, einschließlich oberer und unterer Fall.
3. Wenn es in der Kompilierungseinheit keine öffentliche Klasse gibt, können Sie die Datei nach Belieben benennen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.