Der Punkt-Operator
Mit dem Punkt-Operator haben Sie bereits gearbeitet, obwohl er noch nicht explizit als Operator vorgestellt wurde - dies soll an dieser Stelle nachgeholt werden. Mit dem Punkt-Operator kann sowohl auf die Methoden als auch auf die Attribute eines Objektes zugegriffen werden. Die Syntax ist dabei immer gleich: links vom Punkt wird das Objekt angegeben und rechts vom Punkt das Attribut oder die Methode, auf die zugegriffen werden soll.
Mit Hilfe des Punkt-Operators lassen sich auch Zugriffe kombinieren. Die Methode belle() war wie folgt definiert:
Hier wurde der Punkt-Operator gleich zweimal eingesetzt - zunächst, um auf das Objekt out zugreifen zu können und anschließend, um die Methode println("Wau!") aufzurufen. Theoretisch ist also auch eine Anweisung wie
möglich, aber so lange Anweisungen sehen nicht nur häßlich aus, sie sind auch sehr selten, da sich solche Programme nur noch schlecht lesen lassen.
Zugriff auf Objektattribute
Der Zugriff auf Objektattribute funktioniert prinzipiell genauso wie der Zugriff auf Methoden, doch gibt es ein paar Unterschiede: Zugriffe finden immer in Anweisungen statt, und eine Anweisung ist immer eine Art von Befehl, wie in
Welcher Befehl aber verbirgt sich hinter der folgenden "Anweisung", in der nicht auf eine Methode, sondern auf ein Attribut Bezug genommen wird?
Hier wird auf eine Zahl zugegriffen, eine Zahl kann jedoch nur schlecht als Anweisung interpretiert werden - genauer gesagt gar nicht, und deshalb wird eine solche Anweisung auch mit einer (erneut nicht besonders sprechenden) Fehlermeldung des Compilers bestraft:
Der Zugriff auf ein Objekt-Attribut muss also in eine Zuweisung "verpackt" werden, und dies kann auf zwei Arten geschehen: Entweder wird dem Objekt-Attribut ein neuer Wert zugewiesen oder irgendeinem anderen Wert wird der Wert des Objekt-Attributes zugewiesen, also entweder
oder
Zugriff auf Objektmethoden
Bei Methoden sind Zuweisungen nur in einer Richtung möglich, denn es macht keinen Sinn, zu versuchen, einer Methode einen Wert zuzuweisen. Und so wird eine Anweisung wie
ebenfalls mit einer Fehlermeldung quittiert - diesmal sogar mit einer etwas sprechenderen Meldung:
Die umgekehrte Richtung - einer Variablen eine Methode zuweisen - scheint zunächst genauso sinnlos zu sein. Doch ist sie es nicht unbedingt: Erinnern Sie sich an das Schlüsselwort void, das festlegt, dass eine Methode "nichts" zurückgibt:
Wenn explizit festgelegt werden muss, dass eine Methode nichts zurückgibt, dann wird es vermutlich eine Möglichkeit geben, mit der eine Methode einen Wert zurückgeben kann - und dann macht eine Zuweisung wie
bei der auf der linken Seite eine Variable und auf der rechten Seite eine Methode steht, auch Sinn. Die Details von Methoden mit Rückgabewerten sollen hier jedoch noch nicht besprochen werden, denn zuvor sollten noch andere Unklarheiten aus dem Beispielprogramm erläutert werden.
Attribute vs. Variablen
In der Klasse Hund wurde das Attribut geburtsJahr definiert:
Auf dieses Attribut kann bei einem Hund-Objekt zugegriffen werden, wie oben gezeigt, und es ist sozusagen auf "oberster Ebene" definiert (denn außerhalb von Klassen lassen sich weder Attribute noch Methoden definieren). Ein Attribut zeichnet sich dadurch aus, dass es einen Namen hat (hier geburtsJahr) und einen Typ bzw. eine Klasse (hier Integer).
In der main-Methode wurden jedoch sehr ähnliche Konstruktionen genutzt:
bello ist ganz eindeutig ein Name und ist vom Typ Hund! Der Unterschied liegt streng genommen nur in der "Definitionsebene", denn bello wurde innerhalb eines Methodenkörpers definiert, was bei geburtsJahr nicht der Fall war. Trotzdem unterscheiden sich beide Elemente in einem wesentlichen Punkt: Auf bello kann außerhalb der Methode, in der er definiert wurde, nicht zugegriffen werden - die Sichtbarkeit des Objekts ist auf den Methodenkörper beschränkt.
Diese Unterscheidung wird terminologisch durch die Begriffe Attribut und Variable deutlich gemacht: Eine Variable ist eine Referenz auf irgendein Objekt von irgendeiner Klasse so wie bello, aber auch so wie geburtsJahr. Somit ist auch ein Attribut eine Variable, doch ein Attribut hat zusätzlich die Eigenschaft, dass sein Sichtbarkeitsbereich weniger eingeschränkt ist - es ist lediglich an ein Objekt gebunden.