Zugriff in Java
Schreibe eine Klasse Gate in Gate.java mit einem private int-Feld code, einem Konstruktor Gate(int n), der code = n; setzt, und einer Methode void show(), die code druckt. In Pier.java baue ein Gate mit Gate g = new Gate(9);, dann rufe g.show(); auf. Kompiliere beide Dateien und starte java Pier. Der Bildschirm soll eine Zeile zeigen: 9. Das Feld ist vor Pier verborgen. Die Methode auf Gate kann es trotzdem lesen. private auf dem Feld ist der Lehrstoff dieser Seite.
Ein Feld, das Pier nicht direkt nennen soll
Bisher konnten andere Klassen im selben Ordner oft Felder wie j.fill oder t.size erreichen, wenn diese Felder kein Zugriffswort hatten. Das Wort private ändert das. Ein private-Feld gehört der Klasse, die es deklariert. Methoden innerhalb derselben Klasse dürfen das Feld nutzen. Eine andere Klasse — hier Pier — soll nicht g.code schreiben.
Erstelle zuerst Gate.java. Die public-class-Zeile ist public class Gate. Lass keinen älteren Klassennamen Tag oder Jar hier. Innerhalb der geschweiften Klammern deklariere private int code;. Schreibe den Konstruktor Gate(int n) { code = n; } mit unterschiedlichen Namen, damit diese Seite kein this braucht. Dann schreibe:
void show() { System.out.println(code); }
In Gate.java gibt es kein main. Speichere vor dem Kompilieren. Die Methode show sitzt in derselben Klasse wie code, also darf sie das private Feld lesen. Das ist der erlaubte Pfad auf dieser Seite.
public class Gate {
private int code;
Gate(int n) {
code = n;
}
void show() {
System.out.println(code);
}
}
Pier ruft show auf, nicht g.code
Erstelle Pier.java im selben Ordner. Die public-class-Zeile ist public class Pier. Innerhalb von main schreibe Gate g = new Gate(9);, dann g.show();. Schreibe auf dieser Seite kein System.out.println(g.code);. Wenn du g.code aus Pier versuchst, während code private ist, lehnt javac ab.
Behalte Pier als die Klasse, die main hält. Lege main für diese Lektion nicht in Gate. Wenn eine übrig gebliebene Yard-Datei von der static-Seite noch im Ordner liegt, starte für diese Lektion nicht java Yard — starte java Pier, nachdem du Gate.java und Pier.java kompiliert hast.
public class Pier {
public static void main(String[] args) {
Gate g = new Gate(9);
g.show();
}
}
Aus dem Ordner mit beiden Dateien führe javac Gate.java Pier.java aus. Du kannst Gate.java zuerst und Pier.java danach kompilieren, wenn beide fertig sind. Wenn Klammern, geschweifte Klammern und Semikolons passen, schreibt javac keine eigene Zeile. Dann starte java Pier — nicht java Pier.java und nicht java Gate. Lass die Endung .java beim Startbefehl weg. Starte die Klasse, die main hält. Dieselben Befehle funktionieren unter Windows und macOS.
Das Programm soll eine Zeile drucken und stoppen: 9. Es soll nicht auf Eingabe warten. Wenn das Terminal auf Tastatur wartet, steckt noch ein nextLine-Aufruf aus einer älteren Übung in einer Datei. Lösche ihn und behalte new Gate(9) plus g.show(); in Pier, mit private int code in Gate.
Geh den Lauf einmal durch. Java startet bei Pier.main. Der Ausdruck new Gate(9) baut ein Gate und speichert 9 in code im Konstruktor. Der Aufruf g.show() betritt show auf demselben Objekt. Innerhalb von Gate darf show code lesen und druckt 9. Pier hat das Feld nie genannt. Der Bildschirm zeigt 9.
Wenn du in Pier statt g.show(); System.out.println(g.code); schreibst, stoppt javac mit einem Zugriffsfehler, solange code private ist. Diese Ablehnung ist der Punkt dieser Seite. Setze g.show(); zurück.
Vergleich mit static und offenen Feldern
Auf der static-Seite hast du Tag.ping(); ohne verborgenes Objektfeld aufgerufen. Das funktioniert weiterhin. Diese Seite verbirgt ein Feld und öffnet eine Methode. Ein übrig gebliebenes Tag.ping();-Demo ist eine andere Lektion. Für diese Seite behalte Gate und Pier und g.show();.
Frühere Seiten ließen Felder oft ohne private, sodass j.fill aus einer anderen Klasse kompilierte. Diese lockere Form erscheint noch in kleinen Demos. Diese Lektion wählt absichtlich private, damit du die Grenze siehst. g allein mit System.out.println(g); zu drucken zeigt kein sauberes 9. Rufe g.show(); auf oder drucke über eine Methode, die die Klasse erlaubt.
Zwei Gates, zwei Codes
Jedes new Gate(...) behält sein eigenes private code. Du kannst Gate a = new Gate(2); und Gate b = new Gate(8); schreiben, dann a.show(); und b.show(); aufrufen.
public class Pier {
public static void main(String[] args) {
Gate a = new Gate(2);
Gate b = new Gate(8);
a.show();
b.show();
}
}
Kompiliere und starte erneut: javac Gate.java Pier.java, dann java Pier. Der Bildschirm soll 2 in einer Zeile und 8 in der nächsten zeigen. Jeder show-Aufruf lief auf seinem eigenen Objekt und las dessen private Feld. Gate b = a; zu schreiben baut kein zweites Objekt — nutze zwei new Gate(...)-Aufrufe, wenn du zwei Codes willst.
Wenn beide Zeilen dieselbe Zahl zeigen, prüfe, dass jedes new ein anderes Argument übergibt. Wenn javac über code in Pier klagt, hast du noch eine direkte g.code-Zeile — entferne sie und behalte show.
Was für packages bleibt
Diese Seite hält beide Dateien im selben Ordner mit Standard-Paketlayout. Eine spätere Seite — packages — legt Klassen mit package-Zeilen in benannte Ordner. Bleib hier bei private und show. Erfinde auf dieser Seite keine volle public/protected-Tabelle; das Lehrziel ist ein private Feld und eine Methode, die es trotzdem lesen darf.
Wenn javac beim Kompilieren von Pier.java Gate nicht findet, prüfe, dass Gate.java im selben Ordner liegt und die Klassenzeile public class Gate ist. Wenn der Ordner noch Tag.java oder Yard.java hält, lass sie liegen oder lösche sie nur, wenn sie den Compile-Befehl verwirren. Starte java Pier, nachdem du das Gate-und-Pier-Paar aus dieser Lektion kompiliert hast.
Vor packages
Du kannst private int code; deklarieren, Gate(int n) { code = n; } und void show() { System.out.println(code); } schreiben und aus Pier Gate g = new Gate(9); dann g.show(); ausführen. Kompiliere beide Dateien und starte java Pier. Der Bildschirm zeigt 9. Das private Feld blieb in Gate. Die Methode derselben Klasse druckte es. Die nächste Seite ist packages, wo du Klassen in benannte Paketordner legst.
Behalte private auf dem Feld. Behalte den Druck in show, nicht als g.code aus Pier. Behalte main in Pier. Diese drei Gewohnheiten sind der Kontrollpunkt dieser Seite, bevor du weitergehst. Wenn der Bildschirm 9 über show zeigt, hast du die Zugriffsgrenze so überschritten, wie diese Lektion es meint.
🧠 Testen Sie Ihr Wissen
Testen Sie Ihr Wissen
Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen
📝 Anweisungen
- Lesen Sie jede Frage sorgfältig
- Wählen Sie die beste Antwort für jede Frage
- Sie können das Quiz so oft wiederholen, wie Sie möchten
- Ihr Fortschritt wird oben angezeigt