Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Privater Modifikator | Klassen Fortgeschritten
Java Erweitert
course content

Kursinhalt

Java Erweitert

Java Erweitert

1. Tiefe Java-Struktur
2. Methoden
3. String Advanced
4. Klassen
5. Klassen Fortgeschritten

book
Privater Modifikator

Wie versteckt man Felder und Methoden vor einer anderen Klasse?

Zugriffsmodifikatoren werden verwendet, um die Sichtbarkeit und Zugänglichkeit von Variablen und Methoden in Java zu steuern. Sie ermöglichen es uns, den Geltungsbereich zu definieren und den Zugriff auf bestimmte Mitglieder einer Klasse einzuschränken.

Wir haben bereits im vorherigen Abschnitt über Zugriffsmodifikatoren gesprochen. Jetzt werfen wir einen genaueren Blick auf den am häufigsten verwendeten Zugriffsmodifikator - private.

Wie Sie wissen, können wir mit dem Zugriffsmodifikator private nur auf ein Feld/eine Methode aus der Klasse zugreifen, in der es sich befindet. Schauen wir uns ein Beispiel für die Verwendung des private Modifikators an:

Zum Beispiel, wenn wir nicht möchten, dass eine Variable in einer Klasse für eine andere Klasse sichtbar oder zugänglich ist, können wir den Zugriffsmodifikator private verwenden:

java

Main

copy
123456789101112131415
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.name = "Bob"; System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; }

Wir haben die Felder der Klasse Person als private deklariert. Wenn wir versuchen, das Feld direkt zu initialisieren, erhalten wir einen Fehler, der darauf hinweist, dass das Feld name einen private Zugriffsmodifikator hat und im Hauptprogramm nicht aufgerufen oder geändert werden kann.

Wie initialisiert man ein privates Feld?

Der einfachste Weg, den Schutz zu umgehen, ist die Initialisierung über einen Konstruktor. Auf diese Weise können wir jedoch nur die Felder von Objekten initialisieren, aber nicht auf diese Felder zugreifen. Schauen wir uns ein Beispiel an:

java

Main

copy
123456789101112131415161718
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } }

Wir konnten das Feld name über den Konstruktor initialisieren, aber wir können immer noch nicht auf dieses Feld zugreifen und es mit System.out.println() ausgeben. Um dies zu umgehen, können wir die Methode toString() überschreiben, sodass beim Aufruf von System.out.println(bob); Informationen über seine Felder angezeigt werden. Schauen wir uns ein Beispiel an:

java

Main

copy
1234567891011121314151617181920212223
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }

Endlich ist es uns gelungen, den Wert des name-Feldes des bob-Objekts anzuzeigen. Dies haben wir erreicht, indem wir die überschriebene toString()-Methode verwendet haben, in der wir die Logik zur Anzeige des name implementiert haben.

Es stellt sich die Frage, warum wir diesen Zugriffsmodifikator benötigen, wenn wir so viel zusätzlichen Code schreiben müssen?

Manchmal gibt es in verschiedenen Klassen Variablen mit dem gleichen Namen, und in solchen Fällen ist es notwendig, die Variablen dieser Klassen zu verbergen, damit andere Klassen keinen Zugriff auf unnötige Felder haben. Dies verbessert die Bequemlichkeit beim Schreiben von Code erheblich, wenn man versteht, welches Feld zu welcher Klasse gehört.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 3
We're sorry to hear that something went wrong. What happened?
some-alt