Klassen & Objekte ·
Kapselung ·
Vererbung ·
Polymorphie ·
Abstrakte Klassen ·
Interfaces
Die objektorientierte Programmierung (OOP) ist das Herzstück von Java. Diese Konzepte sind essenziell für die Erstellung modularer, wiederverwendbarer und wartbarer Software.
Klassen sind Blaupausen für Objekte. Sie definieren Attribute (Felder) und Verhalten (Methoden). Ein Objekt ist eine konkrete Instanz einer Klasse, erstellt mit new.
| Konzept | Beschreibung |
|---|---|
| class | Definiert einen neuen Datentyp (Blaupause) |
| new | Erstellt eine neue Instanz (Objekt) |
| Konstruktor | Methode mit gleichem Namen wie Klasse – initialisiert Objekt |
| this | Verweist auf das aktuelle Objekt |
| Felder (Attribute) | Zustand eines Objekts (Variablen) |
| Methoden | Verhalten eines Objekts (Funktionen) |
| Getter/Setter | Methoden zum Zugriff auf private Felder |
void) und heißt exakt wie die Klasse. Wenn Sie keinen Konstruktor definieren, erzeugt Java einen Standard-Konstruktor ohne Parameter.
Kapselung (Encapsulation) verbirgt interne Daten und stellt kontrollierten Zugriff über öffentliche Methoden (Getter/Setter) bereit. Dies schützt die Datenintegrität und ermöglicht spätere Änderungen.
| Modifikator | Sichtbarkeit |
|---|---|
| private | Nur innerhalb der eigenen Klasse |
| default (kein Modifikator) | Innerhalb des Pakets (package-private) |
| protected | Innerhalb des Pakets + in Unterklassen |
| public | Überall sichtbar |
Vererbung (Inheritance) ermöglicht es, eine neue Klasse (Hund) von einer bestehenden Klasse (Tier) abzuleiten. Die Unterklasse erbt alle nicht-privaten Felder und Methoden der Oberklasse.
| Konzept | Beschreibung |
|---|---|
| extends | Definiert die Vererbungsbeziehung |
| super | Verweist auf die Oberklasse (Konstruktor/Methode) |
| @Override | Annotation – Methode überschreibt Oberklassen-Methode |
| final (Klasse) | Klasse kann nicht vererbt werden |
| final (Methode) | Methode kann nicht überschrieben werden |
super() im Konstruktor, um den Konstruktor der Oberklasse aufzurufen – das muss die erste Anweisung im Konstruktor sein.
Polymorphie bedeutet, dass ein Objekt in verschiedenen Formen (Typen) auftreten kann. Überschreiben (Override) ermöglicht unterschiedliche Implementierungen in Unterklassen. Überladen (Overload) erlaubt mehrere Methoden mit gleichem Namen, aber unterschiedlichen Parametern.
| Art | Beschreibung | Beispiel |
|---|---|---|
| Überschreiben (Override) | Unterklasse überschreibt Methode der Oberklasse | @Override void lautGeben() |
| Überladen (Overload) | Mehrere Methoden gleicher Name, unterschiedliche Parameter | void lautGeben() vs. void lautGeben(int anzahl) |
| Subtyp-Polymorphie | Objekt einer Unterklasse wird als Oberklasse behandelt | Tier t = new Hund() |
@Override als Annotation vor überschriebenen Methoden. Es hilft dem Compiler, Fehler zu erkennen (z.B. Tippfehler im Methodennamen).
Abstrakte Klassen können nicht instanziiert werden. Sie dienen als Vorlage für Unterklassen und können sowohl abstrakte als auch konkrete Methoden enthalten. Abstrakte Methoden müssen in konkreten Unterklassen implementiert werden.
| Eigenschaft | Beschreibung |
|---|---|
| abstract class | Kann nicht instanziiert werden (kein new) |
| abstract method | Nur Deklaration, keine Implementierung |
| konkrete Methoden | Können in abstrakter Klasse implementiert werden |
| Felder/Konstruktoren | Wie bei normalen Klassen möglich |
Interfaces definieren einen Vertrag (Kontrakt) für Klassen. Sie enthalten abstrakte Methoden (Standard) und seit Java 8 auch default- und static-Methoden. Eine Klasse kann mehrere Interfaces implementieren.
| Konzept | Beschreibung |
|---|---|
| interface | Definiert abstrakte Methoden (alle sind public abstract) |
| implements | Klasse implementiert ein Interface |
| default method | Methode mit Standard-Implementierung (seit Java 8) |
| static method | Statische Methode im Interface (seit Java 8) |
| Mehrfachvererbung | Eine Klasse kann mehrere Interfaces implementieren |
class
private
extends
@Override
abstract
implements
class Auto extends Fahrzeug implements Fahrbar ·
@Override void fahren() ·
private String name; public String getName()