6.2.4 Sichtbarkeit
Wenn public
angegeben wird, dann kann das Hauptprogramm und jede andere Klasse auf die public-Eigenschaft und die public-Methode zugreifen. Dies ist nicht immer erwünscht. Daher gibt es die weiteren Sichtbarkeiten private
und protected
.
- public (+) Zugriff erlaubt aus Hauptprogramm und aus anderen Klassen.
- private (-) Zugriff nur aus derselben Klasse erlaubt, in der sich die Eigenschaft oder Methode befindet.
- protected (#) Zugriff nur aus derselben Klasse und aus vererbten Klassen.
Die Zeichen in den Klammern geben an, wie die Sichtbarkeit in einem Klassendiagramm dargestellt wird.
Hier unser schon bekanntes Beispiel:
Ausgabe:
1. In der Eigenschaft gespeicherte TelNr. auslesen
0815
2. TelNr. in der Eigenschaft direkt ändern und auslesen
5349
In Zeile 27 greifen wir direkt auf die Telefonnummer zu, die in der Eigenschaft $phoneNumber
in Zeile 7 gespeichert ist und geben diese aus. Der direkte Zugriff über $ute->phoneNumber
ist sehr einfach und bequem.
In Zeile 30 weisen wir der Eigenschaft $phoneNumber
eine neue Telefonnummer zu, die wir in Zeile 31 wieder auslesen. Achtung: wir hatten in Zeile 7 einen String gespeichert und nun wird in Zeile 30 ein Integer übergeben. Dies ist hier ein Problem, da der Integer mit "0" anfängt und daher als Oktalzahl interpretiert wird. Übergeben wurde 012345
und gespeichert wurde 5349
!
Um das oben gezeigte Problem zu vermeiden und um weitere Möglichkeiten zu bieten (dazu später mehr), kann man mit private
oder protected
den direkten Zugriff aus dem Hauptprogramm ($ute->phoneNumber
) verbieten.
Ausgabe:
1. TelNr. über die Methode setPhoneNumber() ändern
Sollte die TelNr. geändert werden? Die neue Nummer lautet nun 012345
2. TelNr. über die Methode getPhoneNumber() auslesen
012345
In Zeile 30 wird über die Methode getPhoneNumber()
die Eigenschaft ausgelesen.
Hinweis
In einer professionellen Programmierung würde natürlich kein "echo" in so einer Methode stehen, sondern es würde vielleicht eine andere Methode aufgerufen.
Wichtig
Wenn die Eigenschaften private
sind, dann können diese Eigenschaften nur über Methoden gesetzt (setter) und gelesen (getter) werden. Ein direkter Aufruf über $ute->phoneNumber
führt zu einer Fehlermeldung.
Anders herum gilt auch: wenn man mit Settern und Gettern arbeitet, dann sollten die Eigenschaften private
sein.