9Klassen und Objekte
Erinnerst du dich noch an das T-Shirt Beispiel aus dem Teil zu Arrays? Natürlich hat Java keinen Datentyp für deine T-Shirts. In diesem Kapitel lernst du, wie du deine eigenen Klassen und Objekte erstellen kannst. Dies ist ein sehr wichtiger Bestandteil von Java, da deine eigenen Programme natürlich nicht nur aus Java's hauseigenen Klassen bestehen sollen.
Klassen
Beginnen wir zunächst mit dem Konzept von Klassen. Du kannst dir eine Klasse als eine Art Bauplan für Objekte vorstellen. Die Klasse T-Shirt beispielsweise hat Attribute wie eine Farbe, eine Marke, einen Herstellungsort etc. Allerdings sind diese Attribute noch nicht konkret. Es ist also an diesem Punkt noch vollkommen unklar, welche Farbe, welche Marke und welchen Herstellungsort dieses T-Shirt hat. Es ist nur klar, dass diese Attribute bei T-Shirts vorhanden sind. Die Definition dieser Klasse sieht wie folgt aus:
public class TShirt {
…
}
// Listing 9.1 Klasse T-Shirt (TShirt.java)
Zunächst legen wir die Sichtbarkeit fest, dies wird auch Datenkapselung genannt. In unserem Beispiel ist die Klasse , auf sie kann also auch von außerhalb der Klasse zugegriffen werden. In der folgenden Tabelle findest du weitere Arten der Datenkapselung.
Sichtbarkeit | Zugriffsmöglichkeit |
---|---|
public | Zugriff von innerhalb und außerhalb der Klasse möglich |
private | Zugriff nur innerhalb der Klasse möglich |
protected | Nur für Objekte der eigenen Klasse und von abgeleiteten Klassen dieser Klasse zugreifbar |
package | Zugriff im gesamten Paket möglich |
Tabelle 9.1 Datenkapselung
Nachdem wir die Sichtbarkeit festgelegt haben, wird definiert, dass es sich um eine Klasse handelt. Anschließend folgt der Name der Klasse. Es ist gängige Praxis diesen Klassennamen großzuschreiben, damit sofort erkannt werden kann, dass es sich um eine Klasse handelt. Eine weitere Konvention ist die, dass der Dateiname nach der Klasse benannt wird. Im Normalfall findet sich pro Datei auch nur eine Klasse, in unserem Fall wäre der Dateiname also TShirt.java. Nachdem du nun gelernt hast, wie Klassen erstellt werden, schauen wir uns an, wie wir die Attribute der Klasse festlegen können.
public class TShirt {
String farbe;
String marke;
String herstellungsort;
void gibInformationenAus() {
System.out.println("Farbe: " + this.farbe +", Marke: " + this.marke + ", Herstellungsort: " + this.herstellungsort);
}
}
// Listing 9.2 Erweiterung der Klasse T-Shirt (TShirt.java)
Die Attribute werden genauso festgelegt wie Variablen, allerdings normalerweise ohne die Zuweisung eines Wertes. Natürlich können Klassen auch Methoden enthalten. In diesem Fall hat die Klasse eine Methode zur Ausgabe aller Attribute. Das Wort meint nur, dass es sich um Attribute der aktuellen Klasse handelt und nicht etwa um Hilfsvariablen.
Konstruktor der Klasse
Natürlich soll die Klasse auch in der Lage sein, richtige Informationen zu speichern. Dafür benötigt die Klasse noch einen Konstruktor. Dieser verhält sich ähnlich wie eine Methode. Er wird aufgerufen, sobald ein Objekt der Klasse erstellt wird. Das klingt etwas komplizierter als es ist, deswegen schauen wir uns dazu ein Beispiel an:
public class TShirt {
String farbe;
String marke;
String herstellungsort;
public TShirt(String farbe, String marke, String herstellungsort) {
this.farbe = farbe;
this.marke = marke;
this.herstellungsort = herstellungsort;
}
void gibInformationenAus() {
System.out.println("Farbe: " + this.farbe +", Marke: " + this.marke + ", Herstellungsort: " + this.herstellungsort);
}
}
// Listing 9.3 Klasse T-Shirt mit Konstruktor
Anders als bei einer Methode, musst du hier keinen Rückgabewert angeben, da ein Konstruktor nicht dazu gemacht ist, etwas zurückzugeben. Der Name des Konstruktors ist derselbe, wie der Name der Klasse. In unserem Fall dient der Konstruktor dazu, Informationen von dem Objekt in der Klasse zu speichern. Die Zuweisungen innerhalb des Konstruktors dienen dazu, den Klassenattributen (, , etc.) die Werte aus den Parametern zuzuweisen.
Objekte
Objekte sind im Gegensatz zu Klassen spezifisch. Hier bekommt die Klasse ihr „Leben“, also ihre Werte zugewiesen. Das Objekt repräsentiert also ein echtes T-Shirt, zum Beispiel aus deinem Kleiderschrank. Schauen wir uns nun an, wie wir ein entsprechendes Objekt unserer Klasse erstellen können:
TShirt erstesTShirt = new TShirt("Schwarz", "Beispielmarke", "Deutschland");
// Listing 9.4 Instanz der Klasse T-Shirt
Die Definition eines Objekts wird auch Instanziierung genannt. Sie erfolgt ähnlich wie die Definition einer Variable. Zunächst wird der Name der Klasse angegeben, danach kannst du dem Objekt einen eigenen Namen geben. Zuletzt erfolgt die Zuweisung: macht dabei nichts anderes, als den Konstruktor der Klasse aufzurufen. Dieser speichert dann die Parameterwerte in der Klasse. Du kannst nun alle Attribute und Methoden der Klasse an dem Objekt aufrufen. Möchtest du zum Beispiel Informationen über das T-Shirt haben, kannst du einfach die Funktion an dem Objekt aufrufen.
TShirt erstesTShirt = new TShirt("Schwarz", "Beispielmarke", "Deutschland");
erstesTShirt.gibInformationenAus();
Ausgabe: Farbe: Schwarz, Marke: Beispielmarke, Herstellungsort: Deutschland
// Listing 9.5 Zugriff auf Funktionen einer Klasse
Auf die gleiche Art kannst du natürlich auch auf Attribute zugreifen. Denk aber daran, dass diese nicht automatisch ausgegeben werden.
Zusammenfassung
Du hast nun eines der wichtigsten Konzepte der objektorientierten Programmierung kennengelernt. Da dieses Konzept durchaus etwas kompliziert ist, möchte ich dir hier nochmal die wichtigsten Punkte an die Hand geben:
Eine Klasse ist eine Art abstrakter Bauplan
Das Objekt ist der tatsächliche Gegenstand, welcher anhand der Klasse als Bauplan erstellt wurde
Eine Klasse hat verschiedene Sichtbarkeitsstufen. Diese werden unter dem Begriff der Datenkapselung zusammengefast.
Du solltest deine Klassennamen groß schreiben
Klassenname und Dateiname sollten identisch sein
Der Konstruktor speichert Objektinformationen in Klassenattributen