Java 'privater' Zugriffsmodifikator

1. Übersicht

In der Programmiersprache Java können Felder, Konstruktoren, Methoden und Klassen mit Zugriffsmodifikatoren markiert werden. In diesem Tutorial werden wir über den Modifikator für den privaten Zugriff in Java sprechen .

2. Das Schlüsselwort

Der Modifikator für den privaten Zugriff ist wichtig, da er die Kapselung und das Ausblenden von Informationen ermöglicht, die Kernprinzipien der objektorientierten Programmierung sind. Die Kapselung ist für die Bündelung von Methoden und Daten verantwortlich, während das Ausblenden von Informationen eine Folge der Kapselung ist - sie verbirgt die interne Darstellung eines Objekts.

Das Erste, an das Sie sich erinnern sollten, ist, dass auf Elemente, die als privat deklariert wurden , nur die Klasse zugreifen kann, in der sie deklariert sind .

3. Felder

Jetzt sehen wir einige einfache Codebeispiele, um das Thema besser zu verstehen.

Erstellen wir zunächst eine Employee- Klasse, die einige private Instanzvariablen enthält:

public class Employee { private String privateId; private boolean manager; //... }

In diesem Beispiel haben wir die Variable privateId als privat markiert, da wir der ID-Generierung eine Logik hinzufügen möchten. Und wie wir sehen können, haben wir dasselbe mit dem Managerattribut gemacht , weil wir keine direkte Änderung dieses Feldes zulassen wollen.

4. Konstruktoren

Erstellen wir nun einen privaten Konstruktor:

private Employee(String id, String name, boolean managerAttribute) { this.name = name; this.privateId = id + "_ID-MANAGER"; }

Indem wir unseren Konstruktor als privat markieren , können wir ihn nur innerhalb unserer Klasse verwenden.

Fügen wir eine statische Methode hinzu, mit der wir diesen privaten Konstruktor nur außerhalb der Employee- Klasse verwenden können:

public static Employee buildManager(String id, String name) { return new Employee(id, name, true); }

Jetzt können wir eine Manager-Instanz unserer Employee- Klasse erhalten, indem wir einfach schreiben:

Employee manager = Employee.buildManager("123MAN","Bob");

Und hinter den Kulissen ruft die buildManager- Methode natürlich unseren privaten Konstruktor auf.

5. Methoden

Fügen wir unserer Klasse nun eine private Methode hinzu:

private void setManager(boolean manager) { this.manager = manager; }

Nehmen wir aus irgendeinem Grund an, wir haben in unserem Unternehmen eine willkürliche Regel, nach der nur ein Mitarbeiter namens „Carl“ zum Manager befördert werden kann, obwohl andere Klassen dies nicht wissen. Wir werden eine öffentliche Methode mit einer Logik erstellen , um diese Regel zu behandeln, die unsere private Methode aufruft :

public void elevateToManager() { if ("Carl".equals(this.name)) { setManager(true); } }

6. privat in Aktion

Sehen wir uns ein Beispiel für die Verwendung unserer Employee- Klasse von außen an:

public class ExampleClass { public static void main(String[] args) { Employee employee = new Employee("Bob","ABC123"); employee.setPrivateId("BCD234"); System.out.println(employee.getPrivateId()); } }

Nach dem Ausführen von ExampleClass wird die Ausgabe auf der Konsole angezeigt :

BCD234_ID

In diesem Beispiel haben wir den öffentlichen Konstruktor und die öffentliche Methode changeId (customId) verwendet, da wir nicht direkt auf die private Variable privateId zugreifen können.

Mal sehen, was passiert, wenn wir versuchen, von außerhalb unserer Employee- Klasse auf eine private Methode, einen Konstruktor oder eine Variable zuzugreifen :

public class ExampleClass { public static void main(String[] args) { Employee employee = new Employee("Bob","ABC123",true); employee.setManager(true); employee.privateId = "ABC234"; } }

Wir erhalten Kompilierungsfehler für jede unserer illegalen Aussagen:

The constructor Employee(String, String, boolean) is not visible The method setManager(boolean) from the type Employee is not visible The field Employee.privateId is not visible

7. Klassen

Es gibt einen Sonderfall, in dem wir eine private Klasse erstellen können - als innere Klasse einer anderen Klasse. Wenn wir andernfalls eine äußere Klasse als privat deklarieren würden, würden wir anderen Klassen den Zugriff darauf verbieten, was sie unbrauchbar macht:

public class PublicOuterClass { public PrivateInnerClass getInnerClassInstance() { PrivateInnerClass myPrivateClassInstance = this.new PrivateInnerClass(); myPrivateClassInstance.id = "ID1"; myPrivateClassInstance.name = "Bob"; return myPrivateClassInstance; } private class PrivateInnerClass { public String name; public String id; } }

In diesem Beispiel haben wir eine private innere Klasse in unserer PublicOuterClass erstellt, indem wir den Modifikator für den privaten Zugriff angegeben haben.

Da wir das private Schlüsselwort verwendet haben, wird der Code nicht kompiliert und der Fehler wird angezeigt , wenn wir aus irgendeinem Grund versuchen, unsere PrivateInnerClass von außerhalb der PublicOuterClass zu instanziieren :

PrivateInnerClass cannot be resolved to a type

8. Fazit

In diesem kurzen Tutorial haben wir den Modifikator für den privaten Zugriff in Java erläutert . Dies ist ein guter Weg, um eine Kapselung zu erreichen, die zum Verstecken von Informationen führt. Infolgedessen können wir sicherstellen, dass wir nur die Daten und Verhaltensweisen, die wir möchten, anderen Klassen zugänglich machen.

Wie immer ist das Codebeispiel auf GitHub verfügbar.