Menu
Coddy logo textTech

Implementierung mehrerer Interfaces

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

Im Gegensatz zur Klassenvererbung, bei der man nur eine Klasse erweitern kann, erlaubt Java einer Klasse, mehrere Interfaces zu implementieren. Auf diese Weise erreicht Java eine Form der Mehrfachvererbung auf sichere Weise.

Um mehrere Schnittstellen zu implementieren, listen Sie diese nach dem implements-Schlüsselwort auf, getrennt durch Kommas:

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 von jedem Interface implementieren, das sie deklariert. Sie können auch Vererbung mit mehreren Interfaces 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 Ihnen, Klassen zu entwerfen, die mehrere Rollen erfüllen. Ein SmartPhone könnte die Schnittstellen Callable, Messageable und Browsable implementieren, wobei jede verschiedene Funktionen definiert, die das Telefon unterstützt.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Smart-Device-System bauen, bei dem Geräte über mehrere Funktionen verfügen können. Sie werden einen SmartTV erstellen, der sowohl ein- und ausgeschaltet werden kann als auch in der Lautstärke regelbar ist – dies demonstriert, wie eine einzelne Klasse mehrere Interfaces implementieren kann, um verschiedene Rollen zu erfüllen.

Sie werden Ihren Code über vier Dateien organisieren:

  • Powerable.java: Definieren Sie ein Interface für Geräte, die mit Strom versorgt werden können. Es sollte zwei Methoden deklarieren: powerOn() und powerOff(), die beide void zurückgeben.
  • VolumeControl.java: Definieren Sie ein Interface für Geräte mit Lautstärkeregelung. Es sollte eine Methode setVolume(int level), die void zurückgibt, und eine Methode getVolume(), die einen int zurückgibt, deklarieren.
  • SmartTV.java: Erstellen Sie eine Klasse, die sowohl das Powerable als auch das VolumeControl Interface implementiert. Ihr SmartTV sollte ein brand Feld (String), ein isOn Feld (boolean, initial false) und ein volume Feld (int, initial 0) haben. Fügen Sie einen Konstruktor hinzu, der den Markennamen entgegennimmt. Implementieren Sie alle erforderlichen Methoden:
    • powerOn() sollte isOn auf true setzen und ausgeben: [brand] TV is now ON
    • powerOff() sollte isOn auf false setzen und ausgeben: [brand] TV is now OFF
    • setVolume(int level) sollte die Lautstärke aktualisieren und ausgeben: [brand] TV volume set to [level]
    • getVolume() sollte die aktuelle Lautstärke zurückgeben
  • Main.java: Bringen Sie alles zusammen, um die Implementierung mehrerer Interfaces zu demonstrieren. Sie erhalten zwei Eingaben: einen Markennamen (String) und einen Lautstärkepegel (int). Erstellen Sie einen SmartTV mit der angegebenen Marke und dann:
    • Rufen Sie powerOn() auf
    • Rufen Sie setVolume() mit dem angegebenen Pegel auf
    • Geben Sie aus: Current volume: [volume] unter Verwendung von getVolume()
    • Rufen Sie powerOff() auf

Sie erhalten zwei Eingaben: die TV-Marke (String) und den Lautstärkepegel (int).

Ihre Ausgabe sollte vier Zeilen zeigen, die demonstrieren, wie Ihr SmartTV beide Interface-Verträge erfüllt – er kann wie jedes Powerable Gerät eingeschaltet und wie jedes VolumeControl Gerät in der Lautstärke geregelt werden!

Spickzettel

Eine Klasse kann mehrere Schnittstellen implementieren, indem sie nach dem Schlüsselwort implements, durch Kommas getrennt, aufgelistet werden:

public class Rectangle implements Drawable, Resizable {
    // Muss alle Methoden beider Schnittstellen implementieren
}

Die Klasse muss alle Methoden jeder Schnittstelle implementieren, die sie deklariert.

Sie können auch Klassenvererbung mit der Implementierung mehrerer Schnittstellen kombinieren:

public class Square extends Shape implements Drawable, Resizable {
    // Implementiert Methoden beider Schnittstellen
    // Kann geerbte Member von Shape verwenden
}

Dies ermöglicht es einer Klasse, mehrere Rollen zu erfüllen und unterschiedliche Fähigkeiten zu besitzen.

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 einen SmartTV mit der angegebenen Marke
        
        // TODO: Rufe powerOn() auf
        
        // TODO: Rufe setVolume() mit dem angegebenen Level auf
        
        // TODO: Gib aus: Current volume: [volume] unter Verwendung von 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