Klassen bilden in der objektorientierten Programmierung die Vorlage, aus der zur Laufzeit des Programms Objekte erzeugt werden. Klassen besitzen Klassen-Variablen, Klassen-Methoden, sowie einen oder mehrere Konstruktor(en).
Erklärung
Klassen sind dir im Rahmen von Java möglicherweise bereits ein Begriff. Jedes Java Programm, ob objektorientiert programmiert oder nicht, muss innerhalb einer Klasse implementiert werden. Bisher sahen deine Klassen möglicherweise oft so aus:
Besuche die App, um alle Inhalte zu sehen!
Jedes Java-Programm benötigt an mindestens einer Stelle im Programmablauf eine main
-Methode. Diese wird üblicherweise in einer eigenen Java-Klasse implementiert, welche kein Objekt abbilden soll. Die Klasse JansWorld
kann also bleiben und du kannst später in der darin enthaltenen main
-Methode Objekte (Instanzen von deinen Klassen) erzeugen.
Eine neue Java-Klasse definieren
Wenn du nun eine neue Java-Klasse erstellen möchtest, so kannst du dies durch Rechtsklick und NEW im src-Folder deiner Entwicklungsumgebung machen.
Wichtig: Der spätere Klassenname muss identisch zum Dateinamen sein! Wähle daher den Dateinamen genau so, wie auch später deine Klasse heißen soll.
Erstellst du nun die Klasse Person
, so muss auch die Datei "Person" genannt werden. Wenn deine Entwicklungsumgebung die Grundstruktur der Klasse nicht für dich bereitstellt, so kannst du diese im Anschluss auch selbst erstellen.
Schreibe dazu public class Name
und ersetze den Namen durch den Namen deiner Klasse. Im Anschluss folgen zwei geschweifte Klammern. Zwischen diese Klammern schreibst du später den Inhalt deiner Klasse. Beim Erstellen der Klasse Person
sieht der Kopf der Klasse dann so aus:
Besuche die App, um alle Inhalte zu sehen!
Klassen-Attribute erstellen
Klassen-Attribute sind Variablen, welche später die Eigenschaften des Objektes speichern werden. Die Klassen-Attribute werden für gewöhnlich immer an den Anfang einer Klasse geschrieben. So verlierst du nicht den Überblick, welche Attribute definiert sind.
Klassen-Attribute sind, wie bereits erwähnt, Variablen. Diese Variablen werden meistens NICHT in dieser Definition initialisiert! Zwar kann den Variablen eine Art Standardwert gegeben werden, aber die Initialisierung geschieht immer später in einem der Konstruktoren.
Bei der Klasse Person
könnten mögliche Klassen-Attribute der Name (engl. name), das Alter (engl. age), der Beruf (engl. jobtitle) und die Größe (engl. height) sein.
- Name (Typ String)
- Age (Typ int)
- Jobtitle (Typ String)
- Height (Typ double)
Mit den implementierten Klassen-Attributen sieht die Klasse Person
nun so aus:
Besuche die App, um alle Inhalte zu sehen!
Klassen-Methoden definieren
Wie du bereits gelernt hast, speichern die Objekte später ihre Eigenschaften in den Klassen-Attributen. Damit jedoch diese Informationen nicht nur herumliegen, müssen auch verschiedene Methoden definiert werden. Hier unterscheiden sich grundlegend zwei Arten von Methoden: Konstruktoren und funktionale Objektmethoden.
Konstruktoren
Konstruktoren sind Methoden, welche nur einmalig beim Erstellen eines neuen Objektes aufgerufen werden. Jede Java-Klasse muss mindestens einen Konstruktor haben.
Es kann jedoch auch mehrere Konstruktoren geben. Falls dies der Fall ist, müssen sich die Konstruktoren durch die Anzahl und/oder Art ihrer Parameter unterscheiden.
Alle Konstruktoren haben jedoch eines gemeinsam: denselben Namen. Und dieser Name ist identisch zum Klassennamen!
Definierst du nicht explizit einen eigenen Konstruktor, so übernimmt dies Java für dich. Der Standard-Konstruktor für die Klasse Person
sieht so aus:
Besuche die App, um alle Inhalte zu sehen!
Wie du siehst, ist darin nicht viel enthalten. Der Standard-Konstruktor enthält also keine Parameter (Informationen, die beim Erstellen des Objektes übergeben werden sollen) und initialisiert auch keine Klassen-Attribute! Wenn beides nicht benötigt ist, so musst du den Konstruktor nicht explizit definieren. Benötigst du jedoch auch nur eine von beiden Funktionalitäten, musst du zwingend deinen eigenen Konstruktor anlegen.
Für die Klasse Person
sollen beispielsweise Parameter übergeben und die Klassen-Attribute damit initialisiert werden. Daher musst du den Konstruktor definieren:
Besuche die App, um alle Inhalte zu sehen!
Selbstreferenz THIS
THIS ist ein besonders wichtiges Schlüsselwort in Java. this
ist dabei eine Selbstreferenz, welche immer genutzt wird, um innerhalb eines Objektes auf sich selbst zu verweisen.
Als Beispiel kommt im obigen Programmcode die Variable name
zweimal vor: Einmal als Klassenattribut name
und einmal als Übergabeparameter name
. Um innerhalb einer Methode auf die Klassenvariable zu verweisen, wird this.name
verwendet. Um den Übergabeparamter zu verwenden, wird nur name
verwendet. Der Ausdruck this.name = name
speichert also den Wert des Übergabeparamteres name
im Klassenattribut name
.
Allgemein gilt: Gibt es keine Elemente mit gleichen Namen, so kann auf this
verzichtet werden.
Funktionale Objektmethoden
Durch den Konstruktor werden Parameter an das Objekt übergeben und die Klassen-Attribute werden initialisiert. Die funktionalen Objektmethoden setzen die Funktionalität der Objekte um.
Jan kann zum Beispiel seinen Geburtstag feiern. Wenn er das macht, dann wird er ein Jahr älter. Doch nicht nur Jan kann das, sondern jede Person wird am Geburtstag ein Jahr älter. Also ist celebrateBirthday()
(Geburtstag feiern) eine funktionale Objektmethode, welche jedes Objekt der Klasse Person
ausführen kann:
Besuche die App, um alle Inhalte zu sehen!
Objekte erzeugen
Die Klasse Person
könnte natürlich noch mehrere Methoden enthalten. Für jetzt reicht es allerdings und die Klasse kann als fertig betrachtet werden.
Um Objekte vom Typ Person
zu erzeugen, benötigst du wieder die Klasse JansWorld
und die darin enthaltene main
-Methode.
Besuche die App, um alle Inhalte zu sehen!
Zuerst muss eine Variable vom Typ des Objektes erzeugt werden (hier Person
). Diese Variable braucht auch einen Namen, hier Jan
. Nach einem Gleichheitszeichen erfolgt die Erzeugung eines neuen Objektes durch new
, gefolgt vom Typ des Objektes und zwei runden Klammern, welche die Übergabeparameter an den Konstruktor enthalten.
Für das Objekt Jan ist der Name klar. Das Alter sei 15 Jahre. Der Beruf von Jan ist Schüler und er ist 1.7m groß.
Besuche die App, um alle Inhalte zu sehen!
Allgemeiner Aufbau einer Java Anweisung zum Erzeugen eines Objektes:
Besuche die App, um alle Inhalte zu sehen!
Wenn Jan nun seinen Geburstag feiert, kann die Methode celebrateBirthday()
auf dem Objekt Jan
aufgerufen werden:
Besuche die App, um alle Inhalte zu sehen!
Auf der Konsole wird dieser Text ausgegeben:
Besuche die App, um alle Inhalte zu sehen!
We Need to Go Deeper - Fun Fact
Du magst Klassen? Dann gibt es eine gute Nachricht für dich. Es ist in Java nicht nur möglich eine Klasse pro .java Datei zu erstellen. Tatsächlich kannst du Klassen verschachteln, wie du möchtest.
Das heißt, du kannst eine Java-Klasse in einer Java-Klasse in einer Java-Klasse in einer Java-Klasse in einer Java-Klasse in einer Java-Klasse in einer Java-Klasse ... erstellen!
Wie sinnvoll das ist, bleibt aber dir überlassen. Verschachtelte Klassen werden in Java verwendet, um einen besonders engen Bezug zwischen der umschließenden (äußeren) Klassen und der umschlossenen (inneren) Klasse herzustellen. Dadurch werden zwei Klassen in einer .java Datei zusammengefasst und der besonders enge Zusammenhang auch programmiertechnisch abgebildet.
Besuche die App, um alle Inhalte zu sehen!