Tracks
/
Java
Java
/
Lehrplan
/
Schnittstellen
Sc

Schnittstellen in Java

1 Übung

Über Schnittstellen

interfaces sind das wichtigste Mittel, um die Verwendung einer Klasse von ihrer Implementierung zu entkoppeln. Diese Entkopplung macht die Pflege der Implementierung flexibler und unterstützt typsicheres generisches Verhalten.

Die Syntax eines Interface ähnelt der einer Klasse, mit dem Unterschied, dass Methoden nur als Signatur erscheinen und kein Rumpf angegeben wird.

public interface Language {
    String speak();
}

public interface ItalianLanguage extends Language {
    String speak();
    String speakItalian();
}

public interface ScriptConverter {
    void setVersion(String version);
    String getVersion();
    String convertCyrillicToLatin(String cyrillic);
}

Die implementierende Klasse muss alle Operationen implementieren, die das Interface definiert.

Interfaces erfüllen typischerweise einen oder mehrere der folgenden Zwecke:

  • Sie ermöglichen es, dass eine Reihe verschiedener Klassen vom verwendenden Code generisch behandelt werden. Dabei spielen Interfaces dieselbe Rolle wie eine Basisklasse. Ein Beispiel dafür ist java.io.InputStream,
  • Sie stellen eine Teilmenge der Funktionalität für einen bestimmten Zweck bereit (zum Beispiel Comparable<T>)
  • Sie legen die öffentliche API einer Klasse offen, sodass mehrere Implementierungen nebeneinander existieren können. Ein Beispiel dafür ist ein Test-Double
public class ItalianTraveller implements ItalianLanguage {

    public String speak() {
        return "Ciao mondo";
    }

    public String speakItalian() {
        return speak();
    }
}

public class ItalianTravellerV2 implements ItalianLanguage {

    public String speak() {
        return "migliorata - Ciao mondo";
    }

    public String speakItalian() {
        return speak();
    }
}

public class FrenchTraveller implements Language {
    public String speak() {
        return "Ça va?";
    }
}

public class RussianTraveller implements Language, ScriptConverter {

    private String version;

    public void setVersion(String version) {
        this.version = version;
    }

    public String getVersion() {
        return version;
    }

    public String speak()
    {
        return "Привет мир";
    }

    public String convertCyrillicToLatin(String cyrillic) {
        throw new UnsupportedOperationException();
    }
}

public class DocumentTranslator implements ScriptConverter {

    private String version;

    public void setVersion(String version) {
        this.version = version;
    }

    public String getVersion() {
        return version;
    }

    public String translate(String russian) {
        throw new UnsupportedOperationException();
    }

    public String convertCyrillicToLatin(String cyrillic) {
        throw new UnsupportedOperationException();
    }
}

Code, der die oben genannten Interfaces und Klassen verwendet, kann:

  • alle Sprecher unabhängig von der Sprache gleich behandeln.
  • einem Subsystem, das die Schriftkonvertierung übernimmt, die Arbeit ermöglichen, ohne dass es wissen muss, mit welchen konkreten Typen es zu tun hat.
  • von Änderungen am italienischen Sprecher unberührt bleiben, was praktisch ist, wenn der Klassen-Code und der nutzende Code von verschiedenen Teams gepflegt werden.

Interfaces werden häufig eingesetzt, um Tests zu unterstützen, weil sie einfaches Mocking ermöglichen.

Interfaces können andere Interfaces mit dem Schlüsselwort extend erweitern.

Die Member eines Interface sind standardmäßig public.

Interfaces können verschachtelte Typen enthalten: interfaces, enums und classes. Die umgebenden Interfaces fungieren dabei als Namensräume. Von außerhalb des Interface greifst du auf verschachtelte Typen zu, indem du den Namen des Interface voranstellst und mit der Punkt-Syntax das Member benennst.

Java unterstützt bewusst keine Mehrfachvererbung, ermöglicht aber über Interfaces eine Art von Mehrfachvererbung.

Außerdem bildet das Konzept, dass sich Polymorphismus über Interfaces umsetzen lässt, die Grundlage des Interface-Mechanismus.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab

Lerne Schnittstellen