Menu
Coddy logo textTech

Mehrere Interfaces implementieren

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

Im Gegensatz zur Klassenvererbung, bei der du nur eine Klasse erweitern kannst, erlaubt Java einer Klasse, mehrere Schnittstellen zu implementieren. So erreicht Java auf sichere Weise eine Form der Mehrfachvererbung.

Um mehrere Schnittstellen zu implementieren, liste sie nach dem Schlüsselwort implements auf, durch Kommas getrennt:

public interface Drawable {
    void draw();
}

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

public class Rectangle implements Drawable, Resizable {
    private int width, height;
    
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing rectangle " + width + "x" + height);
    }
    
    @Override
    public void resize(int width, int height) {
        this.width = width;
        this.height = height;
    }
}

Die Klasse muss alle Methoden aus jeder Schnittstelle implementieren, die sie deklariert. Du kannst Vererbung auch mit mehreren Schnittstellen kombinieren:

public class Square extends Shape implements Drawable, Resizable {
    // Muss Methoden aus beiden Interfaces implementieren
    // Kann auch geerbte Member von Shape verwenden
}

Diese Flexibilität ermöglicht es dir, Klassen zu entwerfen, die mehrere Rollen erfüllen. Ein SmartPhone könnte die Schnittstellen Callable, Messageable und Browsable implementieren, die jeweils unterschiedliche Fähigkeiten definieren, die das Telefon unterstützt.

challenge icon

Aufgabe

Einfach

Erstellen wir ein intelligentes Gerätesystem, bei dem Geräte über mehrere Fähigkeiten verfügen können. Du erstellst einen SmartTV, der sowohl ein- und ausgeschaltet als auch in seiner Lautstärke gesteuert werden kann: So wird demonstriert, wie eine einzelne Klasse mehrere Schnittstellen implementieren kann, um verschiedene Rollen zu erfüllen.

Du organisierst deinen Code auf vier Dateien verteilt:

  • Powerable.java: Definiere eine Schnittstelle für Geräte, die ein- und ausgeschaltet werden können. Sie soll zwei Methoden deklarieren: powerOn() und powerOff(), die beide void zurückgeben.
  • VolumeControl.java: Definiere eine Schnittstelle für Geräte mit Lautstärkeregelung. Sie soll eine Methode setVolume(int level) deklarieren, die void zurückgibt, sowie eine Methode getVolume(), die einen int zurückgibt.
  • SmartTV.java: Erstelle eine Klasse, die sowohl die Schnittstelle Powerable als auch die Schnittstelle VolumeControl implementiert. Dein SmartTV soll ein Feld brand (String), ein Feld isOn (boolean, anfänglich false) und ein Feld volume (int, anfänglich 0) besitzen. Füge einen Konstruktor hinzu, der den Markennamen entgegennimmt. Implementiere alle erforderlichen Methoden:
    • powerOn() soll isOn auf true setzen und Folgendes ausgeben: [brand] TV is now ON
    • powerOff() soll isOn auf false setzen und Folgendes ausgeben: [brand] TV is now OFF
    • setVolume(int level) soll die Lautstärke aktualisieren und Folgendes ausgeben: [brand] TV volume set to [level]
    • getVolume() soll die aktuelle Lautstärke zurückgeben
  • Main.java: Führe alles zusammen, um die Implementierung mehrerer Schnittstellen zu demonstrieren. Du erhältst zwei Eingaben: einen Markennamen (String) und eine Lautstärkestufe (int). Erstelle einen SmartTV mit der angegebenen Marke und:
    • Rufe powerOn() auf
    • Rufe setVolume() mit der angegebenen Stufe auf
    • Gib mithilfe von getVolume() Folgendes aus: Current volume: [volume]
    • Rufe powerOff() auf

Du erhältst zwei Eingaben: die TV-Marke (String) und die Lautstärkestufe (int).

Deine Ausgabe sollte vier Zeilen enthalten, die zeigen, wie dein SmartTV beide Schnittstellenverträge erfüllt. Er kann wie jedes Powerable-Gerät ein- und ausgeschaltet werden und seine Lautstärke kann wie bei jedem VolumeControl-Gerät geregelt werden!

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Eingaben lesen
        String brand = scanner.nextLine();
        int volumeLevel = scanner.nextInt();
        
        // TODO: Erstelle ein SmartTV mit der gegebenen Marke
        
        // TODO: Rufe powerOn() auf
        
        // TODO: Rufe setVolume() mit dem gegebenen Level auf
        
        // TODO: Print: Current volume: [volume] using getVolume()
        
        // TODO: Rufe powerOff() auf
        
    }
}
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

Übe selbstständig: Online-Java-Compiler