Informatik · Klasse 10–12 · aktualisiert
Klassen in Java: Bauplan für Objekte verstehen
Du lernst, wie eine Java-Klasse Objekte beschreibt: Attribute, Methoden, Konstruktor, static und was beim Erzeugen mehrerer Objekte geschieht.
0 von 9 Aufgaben gelöst
Kurz gesagt
Eine Klasse ist der Bauplan für ähnliche Objekte. Sie beschreibt Attribute und Methoden. Ein Objekt ist ein bestimmtes Exemplar davon und entsteht zur Laufzeit, in Java mit new und dem Konstruktor. Mit static gekennzeichnete Elemente brauchen kein Objekt.
Ein Programm für eine Bibliothek muss viele Bücher verwalten. Sie sind alle ähnlich aufgebaut, haben aber verschiedene Daten. Statt jedes Buch neu zu beschreiben, schreibst du einmal einen Bauplan. Genau das ist eine Klasse. Hier lernst du, wie Java daraus Objekte macht.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
4 Abschnitte
Eine Klasse ist in der objektorientierten Programmierung ein abstraktes Modell, ein Bauplan für eine Reihe von ähnlichen Objekten. Sie beschreibt die Attribute (Eigenschaften) und die Methoden (Verhaltensweisen) der Objekte. Man kann auch sagen: Eine Klasse entspricht dem Datentyp eines Objekts.
Ein Objekt wird auch Instanz genannt. Es ist ein bestimmtes Exemplar einer Klasse und wird zur Laufzeit des Programms erzeugt, also während das Programm läuft. Dabei wird für das Objekt Speicher reserviert. Aus einer Klasse können mehrere Objekte gleichzeitig existieren. Jedes Objekt hat eine eigene Identität: Sie unterscheidet es von anderen Objekten, auch wenn diese den gleichen Zustand haben.
Definition
Klasse und Objekt
Die Klasse ist der Bauplan für ähnliche Objekte. Ein Objekt (eine Instanz) ist ein bestimmtes Exemplar dieser Klasse und entsteht zur Laufzeit.
Beispiel: Bibliothek: Klasse „Buch“
- 1Klasse „Buch“: beschreibt die Eigenschaften Inventarnummer, Ausleihstatus, Beschaffungsdatum und weitere
- 2Methode der Klasse: ändert zum Beispiel den Ausleihstatus, wenn ein Kunde ein Buch ausleiht
- 3Objekt 1: das Buch mit der Inventarnummer 4711
- 4Objekt 2: das Buch mit der Inventarnummer 1234
- 5Beide Objekte gehören zur Klasse „Buch“, sind aber zwei verschiedene Exemplare.
Teste dich
Als Beispiel dient eine Lampe. Sie hat Eigenschaften (Attribute) wie Farbe, Gewicht und ob sie leuchtet. Eine sinnvolle Verhaltensweise ist eine Lichtschalter-Methode, die zwischen an und aus umschaltet. Attribute beschreiben also den Zustand, Methoden das Verhalten.
In Java siehst du das im Code. In einer Klasse Beispielklasse speichert die Instanzvariable name einen Namen. Die Methode sagNameUndAnzahl() ist eine Verhaltensweise der Objekte. Schlüsselwörter wie public und private sind Zugriffsmodifizierer (sie legen fest, wie ein Element zugänglich ist). Der Name einer Klasse beginnt in vielen Programmiersprachen, darunter Java, üblicherweise mit einem Großbuchstaben.
Der Konstruktor wird benutzt, um eine Instanz zu erschaffen. Er heißt genauso wie die Klasse. Er sieht aus wie eine Methode, gibt aber keinen Wert zurück, auch kein void. Seine Aufgabe ist, das neue Objekt in einen definierten Anfangszustand zu bringen. Ein Konstruktor kann Parameter haben, zum Beispiel einen Namen, den er in einer Instanzvariable speichert. Hat eine Klasse in Java keinen eigenen Konstruktor, bekommt sie implizit (also ohne dass du ihn schreibst) einen Konstruktor ohne Parameter.
Definition
Konstruktor
Ein Konstruktor hat denselben Namen wie die Klasse und gibt keinen Wert zurück. Er wird beim Erzeugen eines Objekts ausgeführt und setzt es in einen definierten Anfangszustand.
Beispiel: Eine kleine Klasse mit Konstruktor
- 1class AndereKlasse {
- 2 public int eineVariable;
- 3 public AndereKlasse(int eingabe) {
- 4 eineVariable = eingabe;
- 5 }
- 6}
- 7eineVariable ist eine Instanzvariable (Attribut), AndereKlasse(int eingabe) ist der Konstruktor.
- 8Der Konstruktor speichert den übergebenen Wert in eineVariable.
Teste dich
Eine Instanzvariable gehört zu einem Objekt. Jede Instanz hat ihren eigenen Wert, sie wird nicht geteilt. Eine Klassenvariable erkennst du am Schlüsselwort static. Sie hat über alle Instanzen hinweg denselben Wert und kommt in Java nur einmal im laufenden Programm vor. Das Schlüsselwort final bezeichnet dagegen eine Konstante.
Auch Methoden können static sein. Statische Methoden und Variablen brauchen keine Instanz der Klasse, um aufgerufen zu werden. Ein Beispiel ist die Konstante PI in der Klasse java.lang.Math. Auch java.lang.Math.max(3,4) funktioniert, ohne vorher ein Objekt von Math anzulegen. Auch die Methode main, mit der ein Java-Programm startet, ist public static.
Man kann statische Elemente zwar auch über ein Objekt aufrufen. Davon wird aber dringend abgeraten, weil es zu unangenehmen Ergebnissen führt. Rufe sie deshalb über den Klassennamen auf. In einer statischen Methode kannst du außerdem this nicht benutzen. this ist immer an ein Objekt gebunden, und im statischen Fall gibt es keine Objekte.
| Merkmal | Instanzvariable | Klassenvariable |
|---|---|---|
| Wert | Jede Instanz hat ihren eigenen Wert | Über alle Instanzen hinweg derselbe Wert |
| Erkennbar | Ohne das Schlüsselwort static | Am Schlüsselwort static |
| Benötigt | Ein Objekt der Klasse | Kein Objekt, Aufruf über den Klassennamen |
Merke: static bedeutet: Das Element gehört zur Klasse und braucht kein Objekt. In einer statischen Methode gibt es kein this.
Teste dich
Mit new wird ein Objekt erzeugt, und dabei läuft der Konstruktor. Betrachte die Klasse Beispielklasse. Sie hat die Klassenvariable anzahl (Startwert 0), die Instanzvariable name und einen Konstruktor, der anzahl um 1 erhöht und den übergebenen Namen in name speichert. Die Methode sagNameUndAnzahl() gibt eine Zeile nach dem Muster „Beispielklasse(Name) hat Zahl Instanz(en)“ aus.
In main steht ein Array klassenRaum mit Platz für zwei Objekte. Zuerst wird die Zeile „Kermit betritt den Raum...“ ausgegeben, ein Objekt mit dem Namen „Kermit“ erzeugt und sagNameUndAnzahl() für Kermit aufgerufen. Dann folgt „Piggy betritt den Raum...“, ein Objekt „Piggy“ wird erzeugt, und sagNameUndAnzahl() wird für Kermit und danach für Piggy aufgerufen. Jedes Objekt hat seinen eigenen Wert für name. Die Variable anzahl gibt es aber nur einmal, alle Objekte sehen denselben Wert.
Wir leiten die Ausgabe selbst aus dem Code her. Nach „Kermit“ ist anzahl 1. Nach „Piggy“ ist anzahl 2. Deshalb meldet danach auch das Objekt „Kermit“ den Wert 2.
Beispiel: Kermit und Piggy (Ausgabe aus dem Code hergeleitet)
- 1Kermit betritt den Raum...
- 2Beispielklasse(Kermit) hat 1 Instanz(en)
- 3Piggy betritt den Raum...
- 4Beispielklasse(Kermit) hat 2 Instanz(en)
- 5Beispielklasse(Piggy) hat 2 Instanz(en)
Merke: Jedes neue Objekt führt seinen Konstruktor aus. Instanzvariablen sind pro Objekt getrennt, eine Klassenvariable ist für alle Objekte gemeinsam.
Teste dich
Alles auf einen Blick
Klasse
Klasse
Bauplan für ähnliche Objekte mit Attributen und Methoden
Objekt
bestimmtes Exemplar einer Klasse, entsteht zur Laufzeit
Konstruktor
heißt wie die Klasse, gibt keinen Wert zurück, setzt den Anfangszustand
static
gehört zur Klasse, Aufruf über den Klassennamen, kein this
Mehrere Objekte
Instanzvariablen getrennt, Klassenvariable gemeinsam
Musteraufgabe · Schritt für Schritt
Drei Tickets erzeugen (ausgedachtes Beispiel)
- 1Ausgedachte Klasse: class Ticket { private static int anzahl = 0; private String platz; Ticket(String p) { anzahl++; platz = p; } }
- 2In main: Ticket t1 = new Ticket("A1"); Ticket t2 = new Ticket("A2"); Ticket t3 = new Ticket("B7");
- 3Start: anzahl ist 0, es gibt noch kein Objekt.
- 4new Ticket("A1"): Der Konstruktor läuft, anzahl wird 1, platz von t1 ist A1.
- 5new Ticket("A2"): anzahl wird 2, platz von t2 ist A2.
- 6new Ticket("B7"): anzahl wird 3, platz von t3 ist B7.
- 7Ergebnis: anzahl gibt es nur einmal und sie hat den Wert 3. platz ist je Objekt verschieden: A1, A2, B7.
- 8Probe: Der Konstruktor lief dreimal, also 0 + 1 + 1 + 1 = 3.
Fehler finden
Prüfe die Aussagen zu Klassen, Konstruktoren und static In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 4Klassenvariable und Instanzvariable sind vertauscht. Richtig: Eine Klassenvariable hat über alle Instanzen hinweg denselben Wert. Nur die Instanzvariable ist pro Objekt getrennt.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Ein Objekt wird zur Laufzeit aus einem Bauplan erzeugt, den man nennt. Ein Konstruktor gibt zurück, auch kein void. Eine Klassenvariable erkennst du am Schlüsselwort .
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback