Java Access Modifiers
Wir können Java Zugriffsmodifizierer sowohl mit Klassen als auch mit Klassenvariablen und Methoden verwenden. Wir dürfen nur die Zugriffsmodifizierer „public“ oder „default“ mit Java-Klassen verwenden.
Wenn eine Klasse „public“ ist, dann können wir sie von überall aus zugreifen, d.h. von jeder anderen Klasse aus, die sich in anderen Paketen befindet usw. Wir können nur eine „public“ Klasse in einer Quelldatei haben, und der Dateiname sollte derselbe wie der Klassenname der öffentlichen Klasse sein. Wenn die Klasse „default access“ hat, dann kann sie nur von anderen Klassen im selben Paket aus zugegriffen werden.
Java Access Modifiers with Class Member
Wir können alle vier Zugriffsmodifizierer für Variablen und Methoden von Klassenmitgliedern haben. Die Regeln für Zugriffsmodifizierer von Mitgliedern werden jedoch nach den Zugriffsregeln auf Klassenebene angewendet. Zum Beispiel, wenn eine Klasse einen Standardzugriff hat, wird sie in anderen Paketen nicht sichtbar sein und daher werden auch die Methoden und Variablen der Klasse nicht sichtbar sein. Wir werden uns jede davon separat ansehen und dann die Verwendung der Java-Zugriffsmodifizierer mit einem einfachen Programm zeigen.
Java Access Modifiers – public keyword
Wenn ein Klassenmitglied „public“ ist, dann kann es von überall aus zugegriffen werden. Die Mitgliedsvariable oder Methode wird global zugegriffen. Dies ist die einfachste Möglichkeit, Zugang zu Klassenmitgliedern zu gewähren. Wir sollten jedoch vorsichtig sein, dieses Schlüsselwort bei Klassenvariablen zu verwenden, da sonst jeder die Werte ändern könnte. Normalerweise werden Klassenvariablen als privat gehalten und Getter-Setter-Methoden bereitgestellt, um mit ihnen zu arbeiten.
Java Access Modifiers – private keyword
Wenn ein Klassenmitglied „private“ ist, dann wird es nur innerhalb derselben Klasse zugänglich sein. Dies ist der eingeschränkteste Zugriff und das Klassenmitglied wird für die Außenwelt nicht sichtbar sein. Normalerweise halten wir Klassenvariablen als privat und Methoden, die nur innerhalb der Klasse verwendet werden sollen, als privat.
Java Access Modifiers – protected keyword
Wenn ein Klassenmitglied „protected“ ist, dann wird es nur für die Klassen im selben Paket und für die Unterklassen zugänglich sein. Dieser Modifizierer ist weniger eingeschränkt als privat, aber mehr eingeschränkt als öffentlicher Zugriff. Normalerweise verwenden wir dieses Schlüsselwort, um sicherzustellen, dass die Klassenvariablen nur für die Unterklassen zugänglich sind.
Java Access Modifiers – default access
Wenn einem Klassenmitglied kein Zugriffsmodifizierer zugewiesen ist, wird es mit Standardzugriff behandelt. Die Zugriffsregeln ähneln denen für Klassen, und das Klassenmitglied mit Standardzugriff wird nur für die Klassen im selben Paket zugänglich sein. Dieser Zugriff ist eingeschränkter als öffentlich und geschützt, aber weniger eingeschränkt als privat. (Am wenigsten zugänglich) privat < default < geschützt < öffentlich (Am meisten zugänglich)
Lassen Sie uns einige einfache Klassen schreiben, bei 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 Klasse TestA einen 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 die Klasse TestB im selben Paket wie die Klasse TestA ist und daher auf deren Klassenmitglieder zugreifen kann. Private Mitglieder sind nicht zugänglich, aber alle anderen Mitglieder sind zugänglich, weil sie im selben Paket sind.
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 Klasse TestB ist zugänglich, weil sie öffentlich ist. Nur die öffentlichen Mitglieder der Klasse TestB sind zugänglich, da die Klasse TestC weder im selben Paket noch eine Unterklasse von TestB ist.
TestE.java
package com.journaldev.util;
import com.journaldev.access.TestB;
public class TestE extends TestB {
public static to main(String[] args) {
new TestB().methodPublic();
new TestB().methodProtected(); // compile time error
// works, accessing super class protected method using subclass
new TestE().methodProtected();
}
}
Da die Klasse TestE eine Unterklasse von TestB ist, können wir auf die geschützten Mitglieder von TestB über die Kinderklasse TestE zugreifen. Wenn wir versuchen, direkt auf die geschützte Methode der Oberklasse zuzugreifen, erhalten wir einen Kompilierungsfehler. Das ist alles zu den Java-Zugriffsmodifizierern, es ist einfach zu verstehen. Verwechseln Sie nur nicht den Standard- und den geschützten Zugriff. Eine einfache Art, sich zu erinnern, ist, dass der Standardzugriff eingeschränkter als der geschützte ist und geschützte Mitglieder in Unterklassen zugänglich sind.