Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java 8 Default Methods: Interfaces mit Implementierung & Backward Compatibility

Motivation

Vor Java 8 waren Interfaces rein abstrakt. Neue Methoden (z. B. forEach in Collection) hätten alle existierenden Implementierungen gebrochen. Default Methods lösen dies: Interfaces können Implementierungen bereitstellen, die Implementierer nicht überschreiben müssen.

Syntax

public interface Fahrzeug {
    default void hupen() {
        System.out.println("Tüt-tüt!");
    }
}

Mehrfache Default-Methoden – Konfliktlösung

Eine Klasse implementiert zwei Interfaces mit gleicher Default-Methode → Compiler-Fehler. Zwei Lösungen:

1. Eigene Implementierung (Override)

interface Fahrzeug { default void hupen() { System.out.println("Fahrzeug hupt"); } }
interface VierRad { default void hupen() { System.out.println("VierRad hupt"); } }

class Auto implements Fahrzeug, VierRad {
    public void hupen() { System.out.println("Auto hupt eigenständig"); }
}

2. Expliziter Super-Call

class Auto implements Fahrzeug, VierRad {
    public void hupen() {
        Fahrzeug.super.hupen(); // oder VierRad.super.hupen()
    }
}

Static Methods in Interfaces

Seit Java 8 auch static Methoden erlaubt – Hilfsfunktionen, Factory-Methoden:

interface Fahrzeug {
    default void hupen() { System.out.println("Tüt-tüt"); }
    static String typ() { return "KFZ"; }
}

Aufruf: Fahrzeug.typ() (nicht vererbbar, nicht überschreibbar).

Vollständiges Beispiel

public class DefaultDemo {
    public static void main(String[] args) {
        Fahrzeug f = new Auto();
        f.hupen();
    }
}

interface Fahrzeug {
    default void hupen() { System.out.println("Ich bin ein Fahrzeug!"); }
    static void hupeLos() { System.out.println("Hupe los!!!"); }
}

interface VierRad {
    default void hupen() { System.out.println("Ich bin ein Vierrad!"); }
}

class Auto implements Fahrzeug, VierRad {
    public void hupen() {
        Fahrzeug.super.hupen();
        VierRad.super.hupen();
        Fahrzeug.hupeLos();
        System.out.println("Ich bin ein Auto!");
    }
}

Ausgabe:

Ich bin ein Fahrzeug!
Ich bin ein Vierrad!
Hupe los!!!
Ich bin ein Auto!

Regeln & Best Practices

Fazit

Default Methods ermöglichen Interface-Evolution ohne Breaking Changes – der Schlüssel für die Collection-API-Erweiterung in Java 8 (forEach, stream, removeIf, …). Nutzen Sie sie für optionale Verhalten, nicht für Kernlogik.

Java

  1. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  2. Java Kommentare: Typen, Verwendung und Best Practices
  3. Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
  4. Java Strings meistern: Erstellung, Methoden und Best Practices
  5. Java abstrakte Klassen und Methoden: Ein umfassender Leitfaden
  6. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  7. Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
  8. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  9. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
  10. Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität