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.