Menu
Coddy logo textTech

Einführung in Interfaces

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 34 von 87.

Sie haben gesehen, wie abstrakte Klassen Verträge definieren, denen Unterklassen folgen müssen. Aber was ist, wenn Sie möchten, dass eine Klasse mehreren Verträgen folgt? Java erlaubt es einer Klasse nicht, mehrere Klassen zu erweitern, aber es löst dieses Problem mit Interfaces.

Ein Interface ist ein Vertrag, der definiert, was eine Klasse tun kann, ohne festzulegen, wie sie es tut. Im Gegensatz zu abstrakten Klassen enthalten Interfaces (standardmäßig) nur Methodensignaturen ohne Implementierung:

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

Stellen Sie sich ein Interface wie ein Versprechen vor. Wenn eine Klasse ein Interface implementiert, verspricht sie, Implementierungen für alle in diesem Interface deklarierten Methoden bereitzustellen. Das Interface definiert die Fähigkeit, und die Klasse liefert das Verhalten.

Interfaces werden mit dem Schlüsselwort interface anstelle von class deklariert. Alle Methoden in einem Interface sind implizit public und abstract, daher müssen Sie diese Schlüsselwörter nicht schreiben:

public interface Playable {
    void play();    // implizit public abstract
    void pause();
    void stop();
}

Interfaces können auch Konstanten deklarieren, die implizit public static final sind:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // implizit public static final
}

In der nächsten Lektion lernst du, wie Klassen Interfaces mit dem implements-Schlüsselwort implementieren.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Gerätesteuerungssystem aufbauen, indem wir Interfaces definieren, die beschreiben, was verschiedene Geräte tun können. Diese Herausforderung konzentriert sich auf das Erstellen von Interfaces – den Verträgen, die Fähigkeiten definieren, ohne festzulegen, wie sie funktionieren.

Sie werden Ihren Code über drei Dateien organisieren:

  • Switchable.java: Erstellen Sie ein Interface, das definiert, was es bedeutet, wenn ein Gerät schaltbar ist. Jedes schaltbare Gerät sollte in der Lage sein, sich ein- und auszuschalten. Deklarieren Sie zwei Methoden: turnOn() und turnOff(). Denken Sie daran, dass Interface-Methoden implizit public und abstract sind, Sie benötigen also nur die Methodensignaturen.
  • Adjustable.java: Erstellen Sie ein weiteres Interface, das definiert, was es bedeutet, wenn ein Gerät einstellbar ist. Ein einstellbares Gerät sollte in der Lage sein, seine Stufe einzustellen. Deklarieren Sie eine Methode setLevel(int level). Fügen Sie außerdem eine Konstante MAX_LEVEL mit einem Wert von 100 hinzu – denken Sie daran, dass Konstanten in Interfaces implizit public static final sind.
  • Main.java: Demonstrieren Sie, dass Ihre Interfaces korrekt definiert sind, indem Sie Informationen über sie ausgeben. Sie erhalten eine Eingabe: einen Stufenwert (int). Geben Sie die folgenden drei Zeilen aus:
    • Switchable methods: turnOn, turnOff
    • Adjustable methods: setLevel
    • Max level constant: [MAX_LEVEL value] (greifen Sie auf die Konstante über das Adjustable-Interface zu)
    Geben Sie dann aus: Setting level to: [input level]

Sie erhalten eine Eingabe: einen Stufenwert (int).

Diese Herausforderung konzentriert sich rein auf das Definieren von Interfaces – den Blaupausen, die Fähigkeiten beschreiben. In der nächsten Lektion werden Sie lernen, wie Klassen diese Interfaces tatsächlich implementieren, um das reale Verhalten bereitzustellen!

Spickzettel

Ein Interface ist ein Vertrag, der definiert, was eine Klasse tun kann, ohne festzulegen, wie sie es tut. Interfaces enthalten nur Methodensignaturen ohne Implementierung.

Interfaces werden mit dem Schlüsselwort interface deklariert:

public interface Drawable {
    void draw();
}

Alle Methoden in einem Interface sind implizit public und abstract:

public interface Playable {
    void play();    // implizit public abstract
    void pause();
    void stop();
}

Interfaces können Konstanten deklarieren, die implizit public static final sind:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // implizit public static final
}

Eine Klasse kann mehrere Interfaces implementieren, im Gegensatz zum Erweitern mehrerer Klassen.

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: Informationen über die Interfaces ausgeben
        // Ausgabe: "Switchable methods: turnOn, turnOff"
        // Ausgabe: "Adjustable methods: setLevel"
        // Ausgabe: "Max level constant: " gefolgt von Adjustable.MAX_LEVEL
        // Ausgabe: "Setting level to: " gefolgt vom eingegebenen level
        
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung