Überblick über Zugriffsebenen
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 10 von 87.
Zugriffsmodifikatoren steuern, von wo aus auf Felder und Methoden zugegriffen werden kann. Java hat vier Stufen der Zugriffskontrolle.
| Modifikator | Gleiche Klasse | Gleiches Paket | Unterklasse | Überall |
|---|---|---|---|---|
private | Ja | Nein | Nein | Nein |
| default (kein Schlüsselwort) | Ja | Ja | Nein | Nein |
protected | Ja | Ja | Ja | Nein |
public | Ja | Ja | Ja | Ja |
public class BankAccount {
private double balance; // Nur diese Klasse
String accountType; // Standard: nur dasselbe Paket
protected String owner; // Dasselbe Paket + Unterklassen
public String bankName; // Überall zugänglich
}private ist am restriktivsten – verwenden Sie es für interne Daten, auf die niemals direkt zugegriffen werden sollte. public ist am offensten – verwenden Sie es für Methoden, die andere Klassen aufrufen müssen.
Wenn Sie keinen Modifikator angeben, verwendet Java den default-Zugriff (auch package-private genannt). Dies erlaubt den Zugriff nur innerhalb desselben Pakets.
class Helper { // Klasse mit Standardzugriff
void assist() { } // Methode mit Standardzugriff
}Wählen Sie die restriktivste Zugriffsebene, die es Ihrem Code noch ermöglicht, zu funktionieren. Dies schützt Ihre Daten und macht Ihren Code einfacher zu warten.
Aufgabe
EinfachLassen Sie uns ein Student-Erfassungssystem erstellen, das demonstriert, wie Zugriffsmodifikatoren die Sichtbarkeit über verschiedene Dateien hinweg steuern.
Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:
Student.java: Definieren Sie eine Student-Klasse mit Feldern, die unterschiedliche Zugriffsebenen verwenden:privateFeld:studentId(String) - nur innerhalb der Student-Klasse zugänglich- Standard (kein Modifikator) Feld:
grade(int) - innerhalb desselben Pakets zugänglich protectedFeld:name(String) - im selben Paket und in Unterklassen zugänglichpublicFeld:school(String) - überall zugänglich
publicMethode namensgetInfo(), die einen String im Format"[studentId] name - Grade grade at school"zurückgibt.Main.java: Erstellen Sie ein Student-Objekt und demonstrieren Sie, auf welche Felder direkt von außerhalb der Klasse zugegriffen werden kann. Geben Sie das Feldschooldirekt aus und geben Sie dann das Ergebnis vongetInfo()aus, um alle Informationen des Studenten anzuzeigen.
Sie erhalten vier Eingaben: studentId, name, grade und school (in dieser Reihenfolge).
Ihre Ausgabe sollte aus zwei Zeilen bestehen: der direkt aufgerufene Schulname, gefolgt von den vollständigen Studenteninformationen aus der Methode getInfo().
Spickzettel
Zugriffsmodifikatoren steuern, von wo aus auf Felder und Methoden zugegriffen werden kann. Java hat vier Stufen der Zugriffskontrolle:
| Modifikator | Gleiche Klasse | Gleiches Paket | Unterklasse | Überall |
|---|---|---|---|---|
private | Ja | Nein | Nein | Nein |
| default (kein Schlüsselwort) | Ja | Ja | Nein | Nein |
protected | Ja | Ja | Ja | Nein |
public | Ja | Ja | Ja | Ja |
public class BankAccount {
private double balance; // Nur diese Klasse
String accountType; // Default: nur gleiches Paket
protected String owner; // Gleiches Paket + Unterklassen
public String bankName; // Überall zugänglich
}private ist am restriktivsten – verwenden Sie es für interne Daten, auf die niemals direkt zugegriffen werden sollte. public ist am offensten – verwenden Sie es für Methoden, die andere Klassen aufrufen müssen.
Wenn Sie keinen Modifikator angeben, verwendet Java den default-Zugriff (auch package-private genannt), der den Zugriff nur innerhalb desselben Pakets erlaubt:
class Helper { // Klasse mit Default-Zugriff
void assist() { } // Methode mit Default-Zugriff
}Wählen Sie die restriktivste Zugriffsebene, die es Ihrem Code noch ermöglicht zu funktionieren. Dies schützt Ihre Daten und macht Ihren Code einfacher zu warten.
Probier es selbst
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Eingaben lesen
String studentId = scanner.nextLine();
String name = scanner.nextLine();
int grade = Integer.parseInt(scanner.nextLine());
String school = scanner.nextLine();
// TODO: Erstelle ein Student-Objekt mit den Eingabewerten
// TODO: Gib das Feld school direkt aus (zugänglich, da es public ist)
// TODO: Gib das Ergebnis von getInfo() aus, um alle Informationen zum Studenten anzuzeigen
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem