Was ist öffentlich, privat und geschützt in der objektorientierten Programmierung?


Antworten:


151

Sie sind Zugriffsmodifikatoren und helfen uns bei der Implementierung der Kapselung (oder des Versteckens von Informationen). Sie teilen dem Compiler mit, welche anderen Klassen Zugriff auf das zu definierende Feld oder die zu definierende Methode haben sollen.

private - Nur die aktuelle Klasse hat Zugriff auf das Feld oder die Methode.

protected - Nur die aktuelle Klasse und Unterklassen (und manchmal auch Klassen mit demselben Paket) dieser Klasse haben Zugriff auf das Feld oder die Methode.

public - Jede Klasse kann auf das Feld verweisen oder die Methode aufrufen.

Dies setzt voraus, dass diese Schlüsselwörter als Teil einer Feld- oder Methodendeklaration innerhalb einer Klassendefinition verwendet werden.


3
Beachten Sie, dass in Java Mitglieder desselben Pakets auf geschützte Mitglieder zugreifen können
Landon Kuhn

1
Ja, und Java hat auch einen vierten Zugriffsmodifikator, bei dem es sich um die leere Zeichenfolge handelt. Wenn Sie keinen Zugriffsmodifikator angeben, können Sie von jeder Klasse auf Paketebene aus zugreifen.
Ben S

1
Ich mag den "Compiler" -Teil, weil auf die meisten Sprachen, die ich kenne, alle Funktionen / Klassen zur Laufzeit leicht zugegriffen werden können, beispielsweise über Reflexionen in .NET. Daher neige ich dazu zu sagen, dass diese Zugriffsmodifikatoren im Grunde nur eine Hilfe für Programmierer sind, um andere Programmierer, die an / mit demselben Code arbeiten, durch Ausblenden bestimmter Dinge zu führen.
Merkuro

1
Einige Sprachen haben einige Besonderheiten. Wie in Delphi sind private Mitglieder für andere Klassen auf derselben Einheit zugänglich, und Sie müssen streng privat verwenden, wenn Sie dieses Verhalten nicht möchten.
Fabio Gomes

1
C # führt auch den Trick "Zugriffsgeschützte Mitglieder desselben Pakets" aus. Im Wesentlichen ist C # nur Microsoft Java
iGbanam

5

Es handelt sich nicht wirklich um Konzepte, sondern um bestimmte Schlüsselwörter, die in gängigen Sprachen wie C ++ und Java häufig vorkommen (mit leicht unterschiedlicher Semantik).

Im Wesentlichen sollen sie einer Klasse ermöglichen, den Zugriff auf Mitglieder (Felder oder Funktionen) einzuschränken. Die Idee ist, dass je weniger ein Typ in einem anderen Typ zugreifen darf, desto weniger Abhängigkeiten entstehen können. Auf diese Weise kann das Objekt, auf das zugegriffen wird, einfacher geändert werden, ohne dass Objekte beeinflusst werden, die darauf verweisen.

Allgemein bedeutet öffentlich, dass jeder Zugriff haben darf, privat bedeutet, dass nur Mitglieder derselben Klasse Zugriff haben dürfen, und geschützt bedeutet, dass auch Mitglieder von Unterklassen berechtigt sind. Jede Sprache fügt jedoch ihre eigenen Dinge hinzu. Mit C ++ können Sie beispielsweise nicht öffentlich erben. In Java gibt es auch eine Standardzugriffsebene (Paket) und Regeln für interne Klassen usw.


5

Alle drei sind Zugriffsmodifikatoren und Schlüsselwörter, die in einer Klasse verwendet werden. Alles, was öffentlich deklariert ist, kann von jedem Objekt innerhalb der Klasse oder außerhalb der Klasse verwendet werden. Variablen im privaten Bereich können nur von den Objekten innerhalb der Klasse verwendet werden und können nicht durch direkten Zugriff geändert werden (da sie sich durch Funktionen wie die Friend-Funktion ändern können). Alles, was unter dem geschützten Abschnitt definiert ist, kann von der Klasse und ihrer gerade abgeleiteten Klasse verwendet werden.


1

Ein öffentliches Objekt ist eines, auf das von jeder anderen Klasse aus zugegriffen werden kann. Sie müssen nur wissen, um welches Objekt es sich handelt, und Sie können einen Punktoperator verwenden, um darauf zuzugreifen. Geschützt bedeutet, dass eine Klasse und ihre Unterklassen Zugriff auf die Variable haben, jedoch keine anderen Klassen. Sie müssen einen Getter / Setter verwenden, um etwas mit der Variablen zu tun. Ein privates Element bedeutet, dass nur diese Klasse direkten Zugriff auf die Variable hat. Alles andere benötigt eine Methode / Funktion, um auf diese Daten zuzugreifen oder sie zu ändern. Hoffe das hilft.


0

Zusammenfassend lässt sich sagen, dass bei der objektorientierten Programmierung alles in Klassen und Objekte modelliert wird. Klassen enthalten Eigenschaften und Methoden. Öffentliche, private und geschützte Schlüsselwörter werden verwendet, um den Zugriff auf diese Mitglieder (Eigenschaften und Methoden) einer Klasse aus anderen Klassen oder anderen DLLs oder sogar anderen Anwendungen anzugeben.


0

wie oben, aber qualitativ:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

Je weniger Zugriff Sie gewähren, desto weniger Implementierungsdetails treten aus Ihren Objekten aus. Weniger von dieser Art von Leckage bedeutet mehr Flexibilität (auch als "lockerere Kopplung" bezeichnet) in Bezug auf die Änderung der Implementierung eines Objekts, ohne die Clients des Objekts zu beschädigen. Dies ist eine wirklich grundlegende Sache zu verstehen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.