Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will (JAVA)?

3 Antworten

Weil die Klasse A auf alle privaten Variablen der Klasse A zugriff hat.

Somit hat ein Objekt der Klasse A auch auf die privaten Variablen eines anderen Objekts der Klasse A zugriff.

Privat bedeutet ja nicht, dass die Variablen im Objekt gekapselt sind sondern eben in der Klasse. So hat ja zB eine statische Methode in der Klasse A welche ein Objekt der Klasse A entgegen nimmt zugriff auf alle privaten Variablen, obwohl die statische Methode keinem Objekt zugeordnet ist.

Das ist auch eigentlich so logisch. Denn die Kapselung bedeutet nur, dass private Variablen nur von Personen verwendet werden sollen, die am Ende mit den internen Vorgängen der Klasse vertraut sind und man kann annehmen, dass (so ziemlich jeder) der eine Methode zu A hinzufügt auch die internen Vorgänge in der Klasse kennt, was für Personen die Klassen erstellen die A verwenden oder davon erben nicht unbedingt der Fall sein muss.

Also Kapselung ist nicht direkt ein Sicherheitsmechnismus gegen Hacker, sondern eher ein Sicherheitsmechnanismus, dass in größeren Projekten keine Entwickler Dinge in der Klasse verwenden die nicht als Schnittstelle gedacht sind.

Wenn die Variable privat ist, ist sie nur innerhalb der jeweiligen Klasse sichtbar. Wenn du in Klasse A ein Objekt A erstellst, bist du trotzdem innerhalb der Klasse A, deshalb hast du natürlich auch Zugriff auf die privaten Variablen.

Wenn du innerhalb der Klasse A noch eine nested class oder eine inner class machst, hast du von da aus auch Zugriff auf die privaten Variablen von Klasse A, weil du in der nested Class ja trotzdem auch innerhalb der Klasse A bist.

Private variablen stehen einzig und allein der Klasse die sie gehören zur Verfügung. Das sind variablen die du intern in der Klasse änderst, und für den äußeren Nutzen keine Verwendung haben. Wenn du diese Variablen bearbeiten willst, solltest du das über get und set Methoden machen die du public setzt. Mit einer Get methode gibst du den Wert des privaten Feldes zurück, mit einer Set Methode überschreibst du ihn.

Woher ich das weiß:Berufserfahrung – IT-Consultant

jqiow2 
Beitragsersteller
 13.01.2022, 13:59

Ja, aber wenn ich ein Objekt der Klasse in der Klasse erstelle, wozu das Objekt gehört, kann ich draufzugreifen auf die privaten Variablen, warum?

MrManu97  13.01.2022, 14:02
@jqiow2

Weil du dich innerhalb deiner eigenen Klasse fortbewegst. Du erstellst in Klasse A ein Objekt der Klasse A. Du bist aber noch im Definitionsbereich der Klasse A, und da du den nicht verlässt, kannst du mit den Variablen von A machen was du willst. erst wenn du diesen Bereich verlässt hast du keinen Zugriff mehr drauf. Du kannst die Variablen auf public setzen, dann kannst du von überall aus drauf zugreifen, oder protected, wenn eine Klasse, die von A erbt, auf die Variablen von A zugreifen sollen.