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.
Aufgabe
EinfachLassen 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()undpowerOff(), die beide void zurückgeben.VolumeControl.java: Definieren Sie ein Interface für Geräte mit Lautstärkeregelung. Es sollte eine MethodesetVolume(int level), die void zurückgibt, und eine MethodegetVolume(), die einen int zurückgibt, deklarieren.SmartTV.java: Erstellen Sie eine Klasse, die sowohl dasPowerableals auch dasVolumeControlInterface implementiert. Ihr SmartTV sollte einbrandFeld (String), einisOnFeld (boolean, initial false) und einvolumeFeld (int, initial 0) haben. Fügen Sie einen Konstruktor hinzu, der den Markennamen entgegennimmt. Implementieren Sie alle erforderlichen Methoden:powerOn()sollteisOnauf true setzen und ausgeben:[brand] TV is now ONpowerOff()sollteisOnauf false setzen und ausgeben:[brand] TV is now OFFsetVolume(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 vongetVolume() - Rufen Sie
powerOff()auf
- Rufen Sie
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
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem