Wozu dient Interfaces?

matze86

Bekanntes Mitglied
Ich bin gerade an der Stelle "Interfaces" angelangt. Ich habe unten eine Interfaces Klasse und eine Klasse die Interfaces implementiert.
Mir ist soweit klar wie Interfaces arbeiten. Also man kann in Interfaces Methodenköpfe und Instanzvariablen erstellen, und in einer anderen Klasse implementieren.
Diese Klasse MUSS ja die Variablen und Methoden auch haben. Mir erschließt ehrlich gesagt nicht wozu das gut sein soll?

Man könnte ja auch auf Interfaces verzichten oder?

Hier meine beiden Klassen

Interfaces:
Java:
public interface Interface {

    public int getZahl();
    public String getWort();
}
und die Klasse die es implementiert:
Java:
public class lernen implements Interface{

    public static void main(String[] args) {
        
    }

    @Override
    public int getZahl() {
        // TODO Automatisch generierter Methodenstub
        return 0;
    }

    @Override
    public String getWort() {
        // TODO Automatisch generierter Methodenstub
        return null;
    }   
    
    
    
    
}
 

mihe7

Top Contributor
Ein Interface ist wie ein Vertrag: der Nutzer des Interfaces darf sich darauf verlassen, dass die Klasse, die das Interface implementiert, sich an die Zusicherungen hält. Der Nutzer muss also die konkrete Implementierung nicht kennen.

Beispiel:
Java:
public void show(Iterable<?> elements) {
    for (Object element : elements) {
        System.out.println(element);
    }
}

Hier erwartet die Methode ein Objekt, das das Interface Iterable anbietet. Und weil dieses Objekt dieses Interface anbietet, kann die Methode per for-each-Schleife über die Elemente iterieren.

Klar, ich könnte auch schreiben:
Java:
public void show(ArrayList<?> elements) {
    for (Object element : elements) {
        System.out.println(element);
    }
}
Nur damit ist die Methode auf ein Objekt vom Typ ArrayList beschränkt.

Interfaces dienen dazu, das Verhalten von Implementierungen zu spezifizieren, ohne eine konkrete Implementierung anzugeben. Dadurch lassen sich Abhängigkeiten im Code verringern.
 

Robert Zenz

Top Contributor
Zunaechst werden nur Methoden deklariert in einer Schnittstelle, keine Variablen.

Und dann geht es darum unabhaengig von der konkreten Implementierung zu sein. Zwei Beispiele: Listen und Plugins.

Listen gibt es zu Hauf in der JVM, ArrayList, LinkedList und so weiter. Klassischerweise sieht das so aus:

Java:
List<String> items = new ArrayList<>();

Deklariert wird die Variable mit der Schnittstelle List, was bedeutet dass wie nur die List-Schnittstelle verwenden und von der konkreten Implementierung unabhaengig sind. Der Code kann sich zum Beispiel einfach zu

Java:
List<String> items = new LinkedList<>();

aendern lassen ohne dass es die nachfolgende Logik betrifft. Konkreter wird dies wenn die Liste von einer Methode zurueckgegeben wird:

Java:
List<String> items = repository.getItems();

Wuerde hier jetzt getItems eine ArrayList liefern und wir die Variable als solche deklarieren, koennte die Methode nie eine andere Liste zurueckliefern weil damit unser Code bricht.

Ein weiteres sehr gutes Beispiel sind Plugins. Man definiert eine Schnittstelle:

Java:
public interface Plugin {
    public abstract String doComputation(String input);
}

Und dann kann man zur Laufzeit diese Plugins verwenden ohne die konkrete Implementierung ueberhaupt irgendwann gesehen zu haben:

Java:
// Alle Plugins zur Laufzeit laden.
List<Plugin> plugins = serviceLoader.loadAllPlugins();

// Eingabe vom Benutzer holen.
String input = getInputFromUser();
// Neue Variable da wir diese konstant ueberschreiben.
String result = input;

// Ueber alle Plugins iterieren...
for (Plugin plugin : plugins) {
    // ... und diese der Reihe nach auf der Benutzereingabe aufrufen.
    result = plugin.doComputation(result);
}

// Ergebnis dem Benutzer anzeigen.
showResultToUser(result);
 

White_Fox

Top Contributor
Man könnte ja auch auf Interfaces verzichten oder?
Naja...man könnte schon. Nur ist es nicht sinnvoll zu verzichten.

Als Beispiel mal eine einfache MVC-Struktur, der ungefähre Grundaufbau vieler Programme.

Dein Programm bestehe aus drei Objekten:
-Dem Model, das ist sozusagen der Datenteil deines Programms. Hier werden alle Ergebnisse dessen vorgehalten, was der Benutzer so treibt.
-Der View, das ist die Benutzeroberfläche. Die Benutzeroberfläche vom Datenteil vollständig unabhängig, und so kannst du z.B. ein älteres Programm mit Swing-Oberfläche auf JavaFX umstricken.
-Der Controller, enthält die Programmlogik.

Die drei Objekte stehen in folgender Beziehung:
Benutzer gibt irgendwelche Befehle über die View ein -> die View leitet diese Befehle an den Controller weiter -> Controller führt Befehle aus -> View liest Daten aus dem Model aus und aktualisiert sich

Um Entwicklervandalismus zu verhindern will man jetzt sicherstellen, daß z.B. die View keine Befehle direkt auf dem Model ausführen kann. Wie macht man das?

Im Model werden zwei Interfaces implementiert: Eines, daß ausschließlich harmlose Methoden für Leseoperationen enthält, und ein anderes das auch Schreibzugriffe erlaubt. Das Interface für Nur-Lesezugriff wird der View übergeben, und die View vom Model lesen jedoch keinen Schaden anrichten.
Der Controller bekommt dagegen das Interface das Schreibzugriffe unterstützt, um seiner Arbeit nachzugehen.

Und damit hast du jetzt zwar nur ein Modelobjekt, View und Controller können auf dem aber ganz unterschiedliche Dinge tun (oder eben nicht tun) und du hast eine saubere Trennung.


PS: Eine andere wichtige Einsatzmöglichkeit ist, daß du eine Bibliothek bereitstellst, die irgendwas mit völlig fremden Objekten macht. Du, der du die Bibliothek schreibst, weißt daß du einen Satz bestimmter Methoden für deine Arbeit brauchst, du kannst aber nicht wissen wie diese Methoden implementiert werden müssen. Also stellst du ein Interface bereit und sagst "Implementiere das, damit ich arbeiten kann", und dann arbeitest du auf diesem Interface.

Irgendeine Collection zum Sortieren beliebiger Objekte (SortedSet? SortedMap?) stellt z.B. ein Interface bereit, daß du implementieren mußt. Die Schreiber der Bibliothek können ja unmöglich wissen, wie und nach welchen Kriterien deine Objekte sortiert werden sollen. Also gibt es ein Interface mit einer Methode, da übergibt dir die Collection ein Objekt und du lieferst größerAls/gleich/kleinerAls zurück.
 
Zuletzt bearbeitet:

M.L.

Top Contributor
Interfaces können auch eingesetzt werden, wenn häufig(er) Änderungen oder Erweiterungen zu erwarten sind, z.B. beim Typ einer Datenstruktur , den Schichten einer MVC-Applikation oder der Zusammensetzung eines Objekts (SOLID-Prinzipien: "Composition over Inheritance")
 

Blender3D

Top Contributor
Diese Klasse MUSS ja die Variablen und Methoden auch haben. Mir erschließt ehrlich gesagt nicht wozu das gut sein soll?

Man könnte ja auch auf Interfaces verzichten oder?
Wie du anhand der Posts von @M.L. , @Robert Zenz, @mihe7 und @White_Fox erkennen kannst sind Interfaces eine sehr wichtiges Sprachmittel in Java. Anders formuliert würden sie fehlen wäre das ein großer Mangel dieser Programmiersprache.
Hier noch einmal der wesentliche Unterschied zur herkömmlichen Vererbung.
Eine Basisklasse legt konkreten Code und Attribute fest, die in den Kindklassen gebraucht werden. Das hat den Vorteil das Funktionen und Attribute von den Kindklassen weiter benutzt werden können.
Der Nachteil dabei ist, dass die konkrete Implementierung den Benutzer festlegt.
Ein reines Interface verspricht nur Funktionen die Parameter bekommen und Werte zurückgeben. Wie der Benutzer den Algorithmus implementiert ist noch nicht konkret festgelegt.

Es ist zwar möglich, eine reine Schnittstelle mittels einer abstrakten Basisklasse zu formulieren.
Eine Klasse kann dann aber immer nur von einer Klasse erben.
Interface hingegen ermöglicht es der Klasse mehrere Interfaces gleichzeitig zu implementieren. Also eine Art Mehrfachvererbung.
Was die Möglichkeiten von Java erweitert. Von daher möchte ich nicht auf Interfaces verzichten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Stackabarbeitung - Wozu dient das "True" ? Java Basics - Anfänger-Themen 1
G wozu dient getContentPane()? Java Basics - Anfänger-Themen 1
U Wozu dient ein Vector in Java? Java Basics - Anfänger-Themen 6
S Wozu dient die Main Class? Java Basics - Anfänger-Themen 3
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
N Wozu nutzt man in der Main Methode das args Array? Java Basics - Anfänger-Themen 10
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
R Wozu sind Annotations da? Java Basics - Anfänger-Themen 3
H abstract - Wozu? Java Basics - Anfänger-Themen 6
T Erste Schritte Endlosschleife & wozu braucht man /* und */ Java Basics - Anfänger-Themen 19
V OOP Wozu Objekt erstellen? Java Basics - Anfänger-Themen 2
G Wozu ist die Methode offsetByCodePoints(int, int) beim StringBuilder sinnvoll? Java Basics - Anfänger-Themen 1
M Wozu Upcasting? Am Beispiel List = ArrayList Java Basics - Anfänger-Themen 2
P Wozu brauche ich (this.)? Java Basics - Anfänger-Themen 3
F Wozu braucht man array list? Java Basics - Anfänger-Themen 29
B Wozu Observer? Java Basics - Anfänger-Themen 9
D Sinn von Interfaces - Wozu? Java Basics - Anfänger-Themen 9
J Datentypen Array in enum, ?? Wozu ?? Java Basics - Anfänger-Themen 3
J Wozu werden die anonyme Klassen verwendet? Java Basics - Anfänger-Themen 9
F Wozu ist Java gut? Java Basics - Anfänger-Themen 7
H Maps? Wozu? Nutzen? Java Basics - Anfänger-Themen 3
0 Wozu braucht man Generics? Java Basics - Anfänger-Themen 1
V wozu ist das 'L' beim long notwendig ? Java Basics - Anfänger-Themen 5
A wozu ant? Java Basics - Anfänger-Themen 12
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
S Desginfrage Interface - aber wozu eigentlich? Java Basics - Anfänger-Themen 2
E Wozu dienen Schnittstellen? Java Basics - Anfänger-Themen 16
N Wozu Applications? Java Basics - Anfänger-Themen 8
M Methode bekommt ein Objekt der Klasse als Parameter. Wozu? Java Basics - Anfänger-Themen 4
R Wozu sind Interfaces gut? Java Basics - Anfänger-Themen 14
B Hashcode?Was ist das und wozu? Java Basics - Anfänger-Themen 2
R Wozu Interfaces ? Java Basics - Anfänger-Themen 5
G Konstruktoren (was, wozu, wieso, warum) Java Basics - Anfänger-Themen 4
J Kapselung - Dient dazu, um nur den Coder zu "schützen"? Java Basics - Anfänger-Themen 4
D Interfaces von Interfaces macht das noch Sinn? Java Basics - Anfänger-Themen 21
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
M Interfaces Aufgabe Java Basics - Anfänger-Themen 2
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
I XML und Interfaces aus anderen Projekten Java Basics - Anfänger-Themen 3
8u3631984 Record - Interfaces Java Basics - Anfänger-Themen 4
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
H Sinn von Interfaces Java Basics - Anfänger-Themen 21
B JaxB und Interfaces? Java Basics - Anfänger-Themen 2
M Funktionale Interfaces Java Basics - Anfänger-Themen 3
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Zweck von Interfaces immer noch nicht klar Java Basics - Anfänger-Themen 3
M Klasse erbt von Interfaces Java Basics - Anfänger-Themen 6
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
H Polymorphie Interfaces und statischer Typ Java Basics - Anfänger-Themen 33
T Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 7
F Exceptions in Interfaces Java Basics - Anfänger-Themen 4
F Interface Warum Interfaces? Java Basics - Anfänger-Themen 5
R interfaces Java Basics - Anfänger-Themen 1
B Interfaces Java Basics - Anfänger-Themen 6
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
D Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
J Interfaces? Java Basics - Anfänger-Themen 32
M Erstellung Interfaces....totale Anfängerfrage Java Basics - Anfänger-Themen 16
S Erste Schritte Innere Klassen und Interfaces Java Basics - Anfänger-Themen 2
J Wofür dienen Interfaces ? Java Basics - Anfänger-Themen 1
Hijo2006 Frage zu Interfaces Java Basics - Anfänger-Themen 21
Hacer Interfaces implementieren Java Basics - Anfänger-Themen 7
H Implementierung eines Interfaces erweitern Java Basics - Anfänger-Themen 13
L Via Interfaces unterschiedliche Klassen ansprechen Java Basics - Anfänger-Themen 8
A Verwendung von Interfaces Java Basics - Anfänger-Themen 7
J Interfaces Java Basics - Anfänger-Themen 15
D Frage bzgl. Interfaces Java Basics - Anfänger-Themen 10
D Interface Verständnisprobleme von Interfaces Java Basics - Anfänger-Themen 5
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
S Rollen verändern, Interfaces austauschen wie? Java Basics - Anfänger-Themen 10
K Interfaces/Klassen etc. Java Basics - Anfänger-Themen 6
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
S Verständnisproblem bei Interfaces Java Basics - Anfänger-Themen 6
I Interface Verständnisfrage Interfaces (Bsp.: Enumeration) Java Basics - Anfänger-Themen 2
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
O Java Interfaces für andere Programmiersprachen zur Verfuegung stellen? Java Basics - Anfänger-Themen 2
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
G Instanzen eines Interfaces erzeugen Java Basics - Anfänger-Themen 7
M Compiler-Fehler Alle Methoden eines Interfaces Implementiert dennoch Fehler Java Basics - Anfänger-Themen 3
V Interface Interfaces und abstrakte Klassen Java Basics - Anfänger-Themen 3
F Best Practice UML/Planung eines Projektes (Klassen, Interfaces, ...) Java Basics - Anfänger-Themen 0
V Vererbung Vererbung, Interfaces und OOP... Java Basics - Anfänger-Themen 10
C Sinn eines Interfaces? Java Basics - Anfänger-Themen 4
A Interface Poymorphismus bei Interfaces Java Basics - Anfänger-Themen 2
Pentalon Eclipse JUNO keine Vorschläge von Methoden bzw. Interfaces der eigenen Klassen Java Basics - Anfänger-Themen 5
R Mehrere Interfaces(Comparable, ...) Java Basics - Anfänger-Themen 2
J Interfaces Abstrakte Klassen Java Basics - Anfänger-Themen 15
D Interfaces und allgemeingültige Methodenaufrufe Java Basics - Anfänger-Themen 6
H Erste Schritte 2 User Interfaces für eine Anwendung Java Basics - Anfänger-Themen 7
S OOP Wann Proxies und Interfaces? Java Basics - Anfänger-Themen 3
M Interface @Inject mit Interfaces? Java Basics - Anfänger-Themen 2
F Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
V mehrfachvererbung unter interfaces Java Basics - Anfänger-Themen 10
J Interface Wie funktioniert das mit den Interfaces. Ich verstehe es einfach nicht! :( Java Basics - Anfänger-Themen 15
T Interfaces und Implementierungen Java Basics - Anfänger-Themen 12
S Interface mehrere Interfaces Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben