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.
Aufgabe
EinfachLassen 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()undturnOff(). 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 MethodesetLevel(int level). Fügen Sie außerdem eine KonstanteMAX_LEVELmit einem Wert von100hinzu – denken Sie daran, dass Konstanten in Interfaces implizitpublic static finalsind.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, turnOffAdjustable methods: setLevelMax level constant: [MAX_LEVEL value](greifen Sie auf die Konstante über das Adjustable-Interface zu)
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
}
}
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