Java-Zugriffsmodifizierer werden verwendet, um Zugriffssteuerung in Java bereitzustellen. Java bietet Zugriffssteuerung durch drei Schlüsselwörter – private, protected und public. Wir sind nicht immer verpflichtet, diese Zugriffsmodifizierer zu verwenden, daher haben wir einen weiteren, nämlich „Standardzugriff“, „paketprivat“ oder „keinen Modifizierer“.
Java-Zugriffsmodifizierer
Wir können Java-Zugriffsmodifizierer sowohl mit Klassen als auch mit Klassenvariablen und -methoden verwenden. Wir dürfen nur „public“ oder „default“ Zugriffsmodifizierer mit Java-Klassen verwenden.
- Wenn eine Klasse „public“ ist, können wir von überall darauf zugreifen, d.h. von jeder anderen Klasse, die sich in anderen Paketen usw. befindet.
- Wir können nur eine „public“ Klasse in einer Quelldatei haben, und der Dateiname sollte mit dem Namen der öffentlichen Klasse übereinstimmen.
- Wenn die Klasse „Standardzugriff“ hat, kann sie nur von anderen Klassen im selben Paket aus zugegriffen werden.
Java-Zugriffsmodifizierer mit Klassenmember
Wir können alle vier Zugriffsmodifikatoren für Klassenmember-Variablen und -Methoden verwenden. Die Regeln für die Zugriffsmodifikatoren für Member werden jedoch erst nach den Zugriffsregeln auf Klassenebene angewendet. Zum Beispiel, wenn eine Klasse standardmäßigen Zugriff hat, wird sie in anderen Paketen nicht sichtbar sein, und daher werden auch Methoden und Variablen der Klasse nicht sichtbar sein. Wir werden uns jede davon einzeln ansehen und dann die Verwendung der Java-Zugriffsmodifikatoren anhand eines einfachen Programms zeigen.
Java-Zugriffsmodifikatoren – public-Schlüsselwort
Wenn ein Klassenmember „public“ ist, kann er von überall aus zugegriffen werden. Die Member-Variable oder Methode ist global zugänglich. Dies ist der einfachste Weg, um den Zugriff auf Klassenmember zu ermöglichen. Wir sollten jedoch darauf achten, dieses Schlüsselwort nicht mit Klassenvariablen zu verwenden, da sonst jeder die Werte ändern kann. Normalerweise werden Klassenvariablen als privat gehalten und Getter-Setter-Methoden werden bereitgestellt, um mit ihnen zu arbeiten.
Java-Zugriffsmodifikatoren – private-Schlüsselwort
Wenn ein Klassenmitglied als „private“ markiert ist, ist es nur innerhalb derselben Klasse zugänglich. Dies ist der strengste Zugriff, und das Klassenmitglied wird der äußeren Welt nicht sichtbar sein. Normalerweise halten wir Klassenvariablen als privat und Methoden, die nur innerhalb der Klasse verwendet werden sollen, ebenfalls als privat.
Java-Zugriffsmodifikatoren – geschütztes Schlüsselwort
Wenn ein Klassenmitglied als „protected“ markiert ist, ist es nur für Klassen im gleichen Paket und für Unterklassen zugänglich. Dieser Modifikator ist weniger restriktiv als „private“, aber restriktiver als der öffentliche Zugriff. Normalerweise verwenden wir dieses Schlüsselwort, um sicherzustellen, dass Klassenvariablen nur für Unterklassen zugänglich sind.
Java-Zugriffsmodifikatoren – Standardzugriff
Wenn ein Klassenmitglied keinen spezifizierten Zugriffsmodifizierer hat, wird es mit dem Standardzugriff behandelt. Die Zugriffsregeln sind ähnlich wie bei Klassen, und das Klassenmitglied mit Standardzugriff ist nur für Klassen im selben Paket zugänglich. Dieser Zugriff ist restriktiver als öffentlich und geschützt, aber weniger restriktiv als privat. (Am wenigsten zugänglich) private < Standard < geschützt < öffentlich (Am meisten zugänglich) Die untenstehende Tabelle fasst die oben genannten Zugriffsmodifizierer in Bezug auf verschiedene Klassen im selben Paket oder anderen Paketen und Unterklassen zusammen. Lassen Sie uns einige einfache Klassen schreiben, in denen wir die Java-Zugriffsmodifizierer in Aktion sehen werden.
TestA.java
package com.journaldev.access;
class TestA {
public void methodPublic(){
methodPrivate();
}
protected void methodProtected(){
methodPrivate();
}
void methodDefault(){
methodPrivate();
}
private void methodPrivate(){}
}
Beachten Sie, dass die TestA-Klasse Standardzugriff hat und die private Klassenmethode für alle anderen Teile derselben Klasse zugänglich ist. TestB.java
package com.journaldev.access;
import com.journaldev.access.TestA;
public class TestB {
public static void main(String args[]) {
new TestA().methodPublic();
new TestA().methodProtected();
new TestA().methodDefault();
}
public void methodPublic() {
}
protected void methodProtected() {
}
void methodDefault() {
}
private void methodPrivate() {
}
}
Beachten Sie, dass TestB im selben Paket wie die TestA-Klasse liegt und daher auf deren Klassenmitglieder zugreifen kann. Private Mitglieder sind nicht zugänglich, aber alle anderen Mitglieder sind aufgrund des gleichen Pakets zugänglich. TestC.java
package com.journaldev.access.child;
import com.journaldev.access.TestB;
public class TestC {
public static void main(String[] args) {
new TestB().methodPublic();
}
}
Die TestB-Klasse ist zugänglich, weil sie öffentlich ist. Nur öffentliche Mitglieder der TestB-Klasse sind zugänglich, weil die TestC-Klasse nicht im selben Paket liegt und auch keine Unterklasse von TestB ist. TestE.java
package com.journaldev.util;
import com.journaldev.access.TestB;
public class TestE extends TestB {
public static void main(String[] args) {
new TestB().methodPublic();
new TestB().methodProtected(); // compile time error
// funktioniert, Zugriff auf die geschützte Methode der Oberklasse mit der Unterklasse
new TestE().methodProtected();
}
}
Da TestE eine Unterklasse von TestB ist, können wir auf TestB geschützte Elemente über die Kindklasse TestE zugreifen. Wenn wir versuchen, die geschützte Methode der Superklasse direkt aufzurufen, erhalten wir einen Kompilierungsfehler. Das ist alles für die Java-Zugriffsmodifikatoren, es ist einfach zu verstehen. Verwechseln Sie einfach nicht den Standardzugriff mit dem geschützten Zugriff. Ein einfacher Weg, sich zu erinnern, ist, dass der Standardzugriff restriktiver ist als der geschützte Zugriff und geschützte Elemente in Unterklassen zugänglich sind. Vor Kurzem habe ich ein Video erstellt, um die Java-Zugriffsmodifikatoren im Detail zu erklären. Sie können es unten auf YouTube ansehen. https://www.youtube.com/watch?v=QKjnbC3UBtY
Source:
https://www.digitalocean.com/community/tutorials/java-access-modifiers