1. Was sind Klasse und Objekt?
Beginnen wir mit einer Analogie. Stellen Sie sich den Bauplan eines Autos vor. Auf dem Plan steht, dass das Auto vier Räder, einen Motor, eine Farbe, Sitze usw. hat. Aber der Plan selbst fährt nicht auf der Straße, macht keinen Motorlärm und braucht kein Benzin. Er ist nur eine Beschreibung, wie das Auto aufgebaut ist.
Eine Klasse in der Programmierung ist ein solcher „Bauplan“ (oder ein Template), der festlegt, welche Daten (Felder) und Handlungen (Methoden) die Instanzen haben werden.
Ein Objekt ist das „reale“ Auto, das nach diesem Bauplan gebaut wurde – also die konkrete Instanz. Jedes Objekt hat seinen eigenen Zustand (zum Beispiel ist bei einem Auto die Farbe rot, bei einem anderen – blau) und sein Verhalten: Jedes Objekt kann die in der Klasse definierten Handlungen ausführen (zum Beispiel fahren, bremsen, hupen).
Beispiele aus dem Alltag
- Klasse: Mensch (Person) – eine Beschreibung, dass ein Mensch einen Namen, ein Alter, eine Körpergröße hat und sprechen oder laufen kann.
- Objekte: Vasya, Petya, Katya – konkrete Personen, jede mit eigenem Namen und Alter.
| Klasse | Objekt 1 | Objekt 2 |
|---|---|---|
|
|
|
Warum sind Klassen wichtig?
- Zusammengehörige Variablen und Methoden gemeinsam kapseln.
- Beliebig viele Objekte mit derselben Struktur, aber unterschiedlichen Daten erstellen.
- Komplexe Entitäten leicht beschreiben: zum Beispiel „Bankkonto“, „Produkt“, „Buch“, „Benutzer“.
2. Syntax der Klassendeklaration
In Java wird eine Klasse mit dem Schlüsselwort class deklariert. Darauf folgt der Klassenname (traditionell mit großem Anfangsbuchstaben) und anschließend geschweifte Klammern, innerhalb derer Felder und Methoden stehen.
Ein einfaches Beispiel
public class Person {
// Hier kommen Felder und Methoden hin
}
Erläuterung:
- public – Zugriffsmodifizierer.
- class – sagt dem Compiler: „Ich deklariere eine Klasse“.
- Person – der Klassenname (wählen Sie ihn selbst, aber mit großem Anfangsbuchstaben).
Wichtige Regeln zur Benennung von Klassen
- Der Klassenname sollte mit einem Großbuchstaben beginnen (z. B. Car, Account, Book).
- Im Klassennamen sind keine Leerzeichen und Sonderzeichen erlaubt, außer dem Unterstrich und $ (letzteres ist jedoch selten).
- Wenn der Name aus mehreren Wörtern besteht, verwenden Sie CamelCase: BankAccount, BookStore.
Wo schreibt man Klassen?
Eine Klasse kann in einer eigenen Datei deklariert werden (üblich ist: eine Datei – eine Klasse) oder innerhalb einer anderen Klasse (über innere Klassen sprechen wir später).
Zum Beispiel die Datei Person.java:
public class Person {
// Felder und Methoden
}
3. Felder und Methoden einer Klasse (kurz)
Bisher haben wir nur eine Klasse deklariert, aber sie ist leer – wie eine Schachtel ohne Inhalt. Fügen wir „Eigenschaften“ (Felder) und „Aktionen“ (Methoden) hinzu.
Felder (Variablen innerhalb der Klasse)
Felder beschreiben, welche Daten jedes Objekt dieser Klasse haben wird.
public class Person {
String name; // Name der Person
int age; // Alter
}
Methoden (Funktionen innerhalb der Klasse)
Methoden beschreiben, was ein Objekt tun kann.
public class Person {
String name;
int age;
void sayHello() {
System.out.println("Hallo, ich heiße " + name + "!");
}
}
Erläuterung:
- void – die Methode gibt nichts zurück (über Rückgabewerte sprechen wir später).
- sayHello() – der Methodenname; runde Klammern sind obligatorisch.
- Innerhalb der Methode kann man auf die Felder der Klasse zugreifen (zum Beispiel auf name).
4. Ein Objekt erzeugen
Und jetzt – Magie! Wie macht man aus einem Bauplan ein „reales Auto“? Dazu verwendet man das Schlüsselwort new.
Syntax zum Erzeugen eines Objekts
Person vasya = new Person();
- Person – der Typ der Variablen (unsere Klasse).
- vasya – der Variablenname (frei wählbar).
- new Person() – Erzeugung eines neuen Objekts vom Typ Person.
Jetzt haben wir die Variable vasya, die auf ein Objekt der Klasse Person verweist. Dieses Objekt hat seine eigenen Felder und Methoden.
Zugriff auf Felder und Methoden
Wir greifen über den Punktoperator auf Felder und Methoden zu:
vasya.name = "Vasya";
vasya.age = 25;
vasya.sayHello(); // Gibt aus: Hallo, ich heiße Vasya!
Man kann beliebig viele Objekte erstellen
Person petya = new Person();
petya.name = "Petya";
petya.age = 30;
petya.sayHello(); // Hallo, ich heiße Petya!
Jedes Objekt ist eine unabhängige „Kopie“ mit eigenen Daten.
5. Bezug zu den vorherigen Themen
Bis heute haben wir alle Variablen und Methoden direkt innerhalb einer Klasse mit der Methode main deklariert und nicht darüber nachgedacht, eigene Typen zu erstellen. Jetzt können wir unsere eigenen „Container“ für Daten und Funktionen erstellen.
Das eröffnet enorme Möglichkeiten! Sie können nun beliebige Entitäten beschreiben, die in Ihrer Aufgabe vorkommen: Kunden, Produkte, Konten, Bestellungen, Tiere, Autos – alles Mögliche. Programme werden strukturierter, lesbarer und skalierbarer.
Beispiel: unsere erste eigene Klasse
Schreiben wir eine einfache Klasse für unser Mini-Programm – sagen wir, „Bankkonto“ (BankAccount). Wir werden dieses Beispiel im Laufe des Kurses weiterentwickeln.
public class BankAccount {
String owner; // Kontoinhaber
int balance; // Kontostand
void printInfo() {
System.out.println("Inhaber: " + owner + ", Kontostand: " + balance + " Euro.");
}
}
Jetzt können wir in der Hauptmethode main (die weiterhin zum Starten des Programms benötigt wird) Objekte dieser Klasse erstellen:
public class Main {
public static void main(String[] args) {
BankAccount account1 = new BankAccount();
account1.owner = "Ivan";
account1.balance = 1000;
account1.printInfo(); // Inhaber: Ivan, Kontostand: 1000 Euro.
BankAccount account2 = new BankAccount();
account2.owner = "Maria";
account2.balance = 2000;
account2.printInfo(); // Inhaber: Maria, Kontostand: 2000 Euro.
}
}
Beachten Sie: Jedes Objekt hat seine eigenen Feldwerte. Wenn Sie den Kontostand von account1 ändern, beeinflusst das account2 in keiner Weise.
Visuelles Schema: Klasse und Objekte
graph TD
subgraph Class
Person["Class Person | name:String | age:int | sayHello()"]
end
subgraph Objects
vasya["vasya : Person | name = 'Vasya' | age = 20"]
petya["petya : Person | name = 'Petya' | age = 25"]
end
vasya --> Person
petya --> Person
Erläuterung:
- Person – das ist die Klasse (der Bauplan).
- vasya und petya – die Objekte (Instanzen), die nach diesem Bauplan erstellt wurden.
6. Typische Fehler bei der Deklaration von Klassen und der Objekterzeugung
Fehler Nr. 1: Klassenname mit kleinem Anfangsbuchstaben.
In Java ist es üblich (der Compiler meckert nicht, aber alle erfahrenen Programmierer – doch!), Klassen mit großem Anfangsbuchstaben zu benennen. Schreiben Sie nicht class person – sondern class Person.
Fehler Nr. 2: Fehlende geschweifte Klammern.
Vergessen Sie nicht, dass der Klassenrumpf immer in geschweiften Klammern stehen muss.
public class Person // Fehler!
String name;
Richtig:
public class Person {
String name;
}
Fehler Nr. 3: Versuch, ohne Objekterzeugung auf Felder und Methoden der Klasse zuzugreifen.
Wenn eine Methode oder ein Feld nicht als static deklariert ist, kann man darauf nur über ein Objekt zugreifen:
Person.sayHello(); // Fehler!
Richtig:
Person vasya = new Person();
vasya.sayHello();
Fehler Nr. 4: Dateiname stimmt nicht mit dem Klassennamen überein (bei einer public-Klasse).
Wenn die Klasse als public deklariert ist, muss der Dateiname mit dem Klassennamen übereinstimmen:
// Datei Person.java
public class Person { ... }
Wenn die Datei anders heißt, gibt der Compiler einen Fehler aus.
Fehler Nr. 5: Verwendung von Klassenvariablen ohne Objekterzeugung.
Felder der Klasse (nicht static) gehören zum Objekt, nicht zur Klasse selbst.
GO TO FULL VERSION