zum Inhalt springen

Klassen und Objekte

Sie haben bisher zwei Klassen erzeugt: Hund und MeinErstesProgramm. Diese Klassen haben Sie von Eclipse anlegen lassen und anschließend haben Sie sie mit Inhalten gefüllt. Wie sieht es mit Objekten aus? Tatsächlich haben Sie dafür gesorgt, dass auch diese angelegt werden - nur werden Objekte nicht in Form von irgendwelchen Dateien in einem Projekt angelegt, sondern innerhalb einer Klasse in Form von einer Referenz. Erinnern Sie sich an die main-Methode aus der Klasse MeinErstesProgramm - die Anweisung

erzeugt mit Hilfe des new-Operators eine Referenz auf ein Objekt der Klasse Hund (oder auch des Typs Hund - beide Begriffe werden Sie hin und wieder hören, sie sind aber äquivalent). Das Objekt bello bekommen Sie allerdings nicht direkt zu sehen, denn es wird erst dann erzeugt, wenn das Programm ausgeführt wird. Das ist ein wesentlicher Unterschied zwischen Klassen und Objekten, doch es gibt noch weitere Unterschiede:


Sie können eine Klasse nur einmal definieren - wenn Sie jetzt versuchen würden, eine weitere Klasse Hund anzulegen, dann würde Eclipse Sie darauf hinweisen, dass es diese Klasse bereits gibt und die Operation abbrechen. Objekte können Sie hingegen nahezu unbegrenzt anlegen (bis der Arbeitsspeicher voll ist). Erweitern Sie einmal die main-Methode so wie hier:

Nun haben Sie zwei Objekte vom Typ Hund erzeugt - eines ist über die Referenz bello und eines über die Referenz waldi ansprechbar. Und wenn Sie das Programm jetzt ausführen lassen, werden Sie die Ausgabe

in der Console sehen.

Schließlich besteht ein weiterer Unterschied zwischen Objekten und Klassen darin, dass Sie Objekte in Ihrem Programm benutzen können (so wie Sie oben die belle()-Methode aufrufen), während Sie dies bei Klassen nicht können (es gibt Ausnahmen, die jetzt jedoch nicht von Interesse sind): Wenn Sie in der main-Methode versuchen, die belle()-Funktion direkt für die Klasse Hund aufzurufen, 

so wird dies fehlschlagen und Eclipse wird folgende Fehlermeldung anzeigen:

Diese Fehlermeldung ist zugegebenermaßen im Augenblick nicht sehr sprechend, aber sie zeigt, dass der Versuch, über eine Klasse (und nicht über ein Objekt) auf eine Methode zuzugreifen, nicht möglich ist.

*