💡 1. Interfaces als Verträge
Interfaces definieren, WAS ein Objekt leisten kann, nicht WIE. Sie ermöglichen lose Kopplung und Dependency Inversion:
public interface Zahlungsmethode {
// Öffentliche abstrakte Methode:
boolean fuehreZahlungAus(double betrag);
// Default-Methode (ab Java 8 mit Standardimplementierung):
default void sendeBestaetigung(String empfaenger) {
System.out.println("Zahlungsbeleg an " + empfaenger + " gesendet.");
}
}
public class Kreditkarte implements Zahlungsmethode {
@Override
public boolean fuehreZahlungAus(double betrag) {
System.out.println("Kreditkartenzahlung über " + betrag + "€ gebucht.");
return true;
}
}
Die Steckdose an der Wand ist ein Interface. Sie spezifiziert nur 230V und zwei Pins. Ob du einen Föhn, Laptop oder Kühlschrank einsteckst, ist der Steckdose völlig egal!
⚡ 2. Quick-Cheat-Sheet
| Aspekt | Abstrakte Klasse | Interface |
|---|---|---|
| Vererbung | Einfachvererbung (`extends`) | Mehrfachimplementierung (`implements A, B`) |
| Zustand | Kann Instanzvariablen halten | Nur `public static final` Konstanten |
| Konstruktoren | Ja, besitzt Konstruktoren | Nein, keine Konstruktoren möglich |
| Hauptzweck | Gemeinsame Code-Basis ('Ist-ein') | Gemeinsames Verhalten & Rollen ('Kann-ein') |
⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)
Implementiert eine Klasse zwei Interfaces mit identischer Default-Methode, verlangt der Compiler zwingend eine eigene Überschreibung via InterfaceA.super.methode().
Variablen im Interface sind implizit public static final (Konstanten), keine modifizierbaren Objektzustände!
🧠 4. Diagnostischer Selbst-Check
Überprüfe dein Verständnis von Sprach-Features, Speicherverwaltung und Enterprise-Architektur, bevor du den Code in der Web-IDE schreibst.