Beim Definieren einer Klasse und ihrer Mitglieder können Sie verschiedene Zugriffsmodifikatoren verwenden, um die Sichtbarkeit von Klassenmitgliedern zu steuern und so deren Umfang einzuschränken. Im Folgenden finden Sie eine detaillierte Erläuterung der Rolle jedes Zugriffsmodifikators:
-
public
Zugriffsmodifikatoren:public
Auf Mitglieder kann von jeder anderen Klasse zugegriffen werden, unabhängig davon, ob sie sich im selben Paket befinden oder nicht.- Innerhalb verschiedener Pakete können Sie Objekte der Klasse verwenden, um auf
public
Mitglieder zuzugreifen. public
Mitglieder haben den größten Umfang und können während des gesamten Programms abgerufen werden.- Beispiel:
public class MyClass { public int publicField; public void publicMethod() { // 在这里编写代码 } }
-
protected
Zugriffsmodifikatoren:protected
Auf Mitglieder kann nur innerhalb von Klassen innerhalb desselben Pakets und Unterklassen dieser Klasse zugegriffen werden.- Innerhalb verschiedener Pakete können nur Unterklassen dieser Klasse
protected
durch Vererbung auf Mitglieder zugreifen. protected
Der Bereich eines Mitglieds liegt zwischenpublic
und dem Standardzugriffsmodifikator.- Beispiel:
public class MyClass { protected int protectedField; protected void protectedMethod() { // 在这里编写代码 } }
-
Standardzugriffsmodifikator (
default
):- Wenn kein Zugriffsmodifikator verwendet wird, verwendet das Mitglied standardmäßig
default
, was auch als Zugriff auf Paketebene bezeichnet wird. default
Auf Mitglieder kann nur von anderen Klassen innerhalb desselben Pakets aus zugegriffen werden.default
Mitglieder sind in verschiedenen Paketen nicht sichtbar, d. h. Klassen in anderen Paketen können nicht direkt auf sie zugreifen.- Beispiel:
class MyClass { int defaultField; void defaultMethod() { // 在这里编写代码 } }
- Wenn kein Zugriffsmodifikator verwendet wird, verwendet das Mitglied standardmäßig
-
private
Zugriffsmodifikatoren:private
Auf Mitglieder kann nur innerhalb derselben Klasse zugegriffen werden und andere Klassen können nicht direkt darauf zugreifen.private
Modifikatoren bieten die höchste Kapselungsebene und stellen sicher, dass Mitglieder verborgen sind und nur indirekt über öffentliche Methoden der Klasse darauf zugegriffen werden kann.private
Mitglieder haben den kleinsten Umfang und sind auf die Klasse beschränkt.- Beispiel:
public class MyClass { private int privateField; private void privateMethod() { // 在这里编写代码 } }
Wählen Sie entsprechend den Anforderungen und Entwurfsprinzipien des Programms geeignete Zugriffsmodifikatoren aus, um den Umfang der Klassenmitglieder einzuschränken und die Sicherheit und Wartbarkeit des Programms zu gewährleisten. Das Befolgen der Best Practices für Zugriffsmodifikatoren kann die Sichtbarkeit von Klassenmitgliedern effektiv steuern und die Kopplung des Codes reduzieren, wodurch der Code robuster und einfacher zu warten ist.
Zugriffsmodifikator | Innerhalb derselben Klasse | Kurse im selben Paket | Unterklassen in verschiedenen Paketen | Nicht-Unterklassen in verschiedenen Paketen |
---|---|---|---|---|
öffentlich | sichtbar | sichtbar | sichtbar | sichtbar |
geschützt | sichtbar | sichtbar | sichtbar | Unsichtbar |
Standard | sichtbar | sichtbar | Unsichtbar | Unsichtbar |
Privat | sichtbar | Unsichtbar | Unsichtbar | Unsichtbar |
In der Tabelle ist für jeden Zugriffsmodifikator die Sichtbarkeit des Mitglieds unter diesem Modifikator markiert:
- „Sichtbar“ bedeutet, dass auf das Mitglied zugegriffen werden kann.
- „Unsichtbar“ bedeutet, dass das Mitglied in der aktuellen Situation nicht erreichbar ist.
Es ist zu beachten, dass protected
Unterklassen bei Zugriffsmodifikatoren zwar auf protected
Mitglieder in ihrer übergeordneten Klasse zugreifen können, für Nicht-Unterklassen in anderen Paketen jedoch immer noch unsichtbar sind. Zugriffsmodifikatoren default
sind zwar in Klassen im selben Paket zugänglich, in Klassen in verschiedenen Paketen jedoch immer noch unsichtbar. Auf Zugriffsmodifikatoren private
kann unter keinen Umständen nur innerhalb der Klasse zugegriffen werden.
Die unterschiedlichen Bereiche und die Sichtbarkeit dieser Zugriffsmodifikatoren helfen dabei, den Zugriff auf Klassenmitglieder zu steuern, wodurch Daten gekapselt und ausgeblendet werden und die Sicherheit und Wartbarkeit des Programms gewährleistet wird.
Konkrete Beispiele
// 文件名:Student.java
public class Student {
public String name; // 公开访问
protected int age; // 受保护访问
int score; // 默认访问修饰符
private String address; // 私有访问
// 构造方法
public Student(String name, int age, int score, String address) {
this.name = name;
this.age = age;
this.score = score;
this.address = address;
}
// 公开方法
public void printInfo() {
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("成绩:" + score);
// 注意:私有成员在类的内部可以直接访问
System.out.println("地址:" + address);
}
// 受保护方法
protected void showAge() {
System.out.println("年龄:" + age);
}
// 默认访问修饰符方法
void showScore() {
System.out.println("成绩:" + score);
}
// 私有方法
private void showAddress() {
System.out.println("地址:" + address);
}
}
// 文件名:Main.java
public class Main {
public static void main(String[] args) {
Student student = new Student("Alice", 20, 85, "Beijing");
// 公开成员和方法可以在任何地方访问
student.name = "Bob";
student.printInfo();
// 受保护成员和方法只能在同一个包或子类中访问
student.age = 21;
student.showAge();
// 默认访问修饰符的成员和方法只能在同一个包中访问
student.score = 90;
student.showScore();
// 私有成员和方法只能在同一个类中访问
// student.address = "Shanghai"; // 编译错误
// student.showAddress(); // 编译错误
}
}
Im obigen Beispiel haben wir eine Student
Klasse namens definiert und verschiedene Zugriffsmodifikatoren verwendet, um die Sichtbarkeit der Mitglieder zu steuern. In Main
der Klasse können wir die Auswirkungen verschiedener Zugriffsmodifikatoren auf den zugänglichen Bereich von Mitgliedern und Methoden sehen. Beachten Sie, dass sich Main
die Klasse und die Student
Klasse im selben Paket befinden und daher Zugriff auf Mitglieder und Methoden sowohl mit Standard- als auch mit geschützten Zugriffsmodifikatoren haben. Auf Mitglieder und Methoden mit privaten Zugriffsmodifikatoren kann nur innerhalb der Klasse zugegriffen werden und andere Klassen können nicht direkt darauf zugreifen.