Einsatz von Interface

Sascha Laurent

Aktives Mitglied
Hallo Leute,

ich habe hiermal eine rein theoritische Frage zu Interface.

Okay, ich weiß Interface werden (auch wenn einige hier das als unschön finden) z.B. / u.U. für Mehrverfachvererbung benutzt.

Sollte man aber Interface's auch dann benutzten, wenn man einen abgeschlossenen Datenblock symoblisieren will. Also z.B.

Ich habe einen Datenblock der Beschreibt, wie von wem Daten übertragen wurden. Diese wird als Domain benutzt und werden nicht gespeichert, sondern dienen als eine Header ausschliesslich zu Übertragung.

Dieser Datenblock wird im Programm mehrfach benutzt.

Java:
class Header {
        private String username;
        private String shema;

        // Getter / Setter
        ...
}

Würdet Ihr, um einen sauberen Implementierung, dieses als Interface implementieren also

Java:
class Header implements IHeader {
        ...
}

und die Funktionen dann wie folgt implementieren

Java:
IHeader myfunc(IHeader header)

oder ist

Java:
Header myfunc(Header header)

ein sauberer Stiel? Oder wann würdet Ihr Interface (außer Mehrfachvererbung) benutzten?

Danke
Sascha
 
Zuletzt bearbeitet von einem Moderator:

Michael...

Top Contributor
Was Du da mit Deinem Header bezweckst und was das mit einem Interface zu tun haben soll habe ich nicht wirklich verstanden.

Interfaces werden u.a. dann benutzt wenn man sich nicht auf eine konkrete Klasse festlegen will oder kann. Ein Interface ist einfach eine Implementierungsvorschrift, wenn ein Objekt ein Interface implementiert müssen die vom Interface definierten Methoden implementiert werden. Das hat den Vorteil man muss, wenn man auf solche Objekte zugreift, dessen konkrete Klasse nicht kennen, es reicht das relevante Interface zu kennen.

Manchmal werden Interfaces auch zur Mehrfachvererbung "missbraucht", aber das einzige was dabei "vererbt" wird, sind Methodendeklarationen - ich würde da jetzt nicht von einer echten Vererbung sprechen.
 

DarkLegend

Mitglied
Also mal ausgehend von deiner aussage: (Verstehe auch nicht wirklich was du mit dem unten folgenden Code willst)
Ich habe einen Datenblock der Beschreibt, wie von wem Daten übertragen wurden. Diese wird als Domain benutzt und werden nicht gespeichert, sondern dienen als eine Header ausschliesslich zu Übertragung.

Prinzipiell hängt der Einsatz eines Interfaces immer vom deinem Vorhaben ab.
Willst du lediglich eine feste Übertragungsart festlegen, d.h. der Header ist immer gleich, macht ein Interface an dieser Stelle wenig Sinn.
Willst du jedoch beispielsweise mehrere Übertragungsarten anbieten (oder später solche erweitern) macht es Sinn, ein Interface mti allen relevanten Fakten die du übertragen willst zu definieren.
Anschließend können diese dann in unterschiedlichen Formaten übertragen werden, solange sie die Methoden des Interfaces implementieren.
 

hdi

Top Contributor
Ich geb dir mal noch ein konkretes Bsp dann verstehst du es vllt besser:

Du modellierst ein Lebensmittelgeschäft und du hast Nahrungmittel. Das ist vllt ne abstrakte Klasse mit der abstrakten Methode getKaufpreis(). Du machst nun Klassen für Banane, Apfel usw. Die erben von Nahrungsmittel.Dann hast du eine Kasse, mit einer Methode
Code:
abrechnen(Nahrungsmittel[] einkauf);
. Soweit alles okay.

Aber nun soll das Geschäft plötzlich expandieren und auch Fahrräder anbieten. Was tust du nun? Du kannst diese neue Klasse nicht in eine Vererbungshierarchie mit Nahrungsmitteln quetschen weil diese Objekte viel zu unterschiedlich sind. Ein Fahrrad hat keinen Kaloriengehalt und ein Nahrungsmittel hat keine Gangschaltung ;)

D.h. an der Kasse brauchst du nun ne Liste von Nahrungsmitteln und zusätzlich eine Liste von Fahrrädern. D.h. die abrechnen()-Methode muss abgeändert werden.

Wenn du aber ein Interface hast

Java:
interface Erwerbbar{
  public double getKaufpreis();
}

kannst du es in beiden Klassen implementieren und an der Kasse verwendest du einfach den Datentyp "Erwerbbar", d.h.
Code:
abrechnen(Erwerbbar[] einkauf).
Jetzt können noch tausend noch so unterschiedliche Klassen dazu kommen, solange eine Klasse das Interface implementiert hast du an der Kasse keine Änderung, weil es dir dort egal ist um was es sich handelt - du kannst die Methode getKaufpreis() aufrufen und mehr interessiert dich da auch nicht.

D.h. du hast eine abstraktere Sicht auf Objekte erlangt. Das ist das Ziel beim Programmieren, immer möglichst abstrakt, d.h. allgemeine Datentypen, die immer nur die Methoden zur Verfügung stellen, die an der jeweiligen Stelle im Programm nötig sind - in Bsp der Kasse ist das nur getKaufpreis().

Du brauchst kein Interface solange du
1) alle Objekte in eine einzige Hierarchie packen kannst, denn dann verwendest du einfach überall den Datentyp der Top-Level Vaterklasse und damit sind alle Objekte abgdeckt.
2) du dir sicher bist dass sich daran auch niemals etwas ändern wird

Aber da 1) oft nicht geht, siehe dieses Bsp, und man von 2) sowieso nie ausgehen sollte.. :D

PS: Du kannst dir auch mal meinen Kurs anschauen, siehe Signatur. Teil 22 & Teil 23 behandeln den Sinn von Interfaces und abstrakten Klassen.
 
Zuletzt bearbeitet:

Noctarius

Top Contributor
Bitte nutze die Java-, Code-, ...-Tags

Zur Frage:
Generell ist es immer gut Methoden per Interface zu definieren. Immer mehr Frameworks basieren auf dieser Annahme um z.B. mehrere Implementierungen beliebig auszutauschen. Um hier nur die wichtigsten zu nennen Spring (WireByType) und OSGi (Services).
Aber auch in eigenen Projekten kann es schnell vorkommen, dass man nachträglich den Wunsch verspürt eine Implementierung zu tauschen, ohne die alte wegzuschmeißen. Bei uns in der Firma sind das z.B. Berechnungstypen für verschiedene Punktesysteme.

Generell ist bei uns in der Firma die Einigung gekommen nahezu alles zu Interfacezieren (zu mal Eclipse eine geniale Methode kennt: Extract Interface) da auch schnell mal der Wunsch kommen kann Daten in mehreren Formaten zu persistieren, z.B. standardmäßige Speicherung in der Datenbank (per JPA) oder exportieren der Daten (per JAXB). Man könnte beide Annotations in die gleiche Klasse hängen oder man macht ein Interface und 2 Implementierungen dieses.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Optimaler Einsatz von Try bei Dateizugriff Java Basics - Anfänger-Themen 4
S Einsatz von Behavior und Arbitrator Java Basics - Anfänger-Themen 4
G Warum Performancesteigerung durch EInsatz von BufferedWriter Java Basics - Anfänger-Themen 23
I No Jakarta Enterprise Beans found with interface ignorieren? Java Basics - Anfänger-Themen 2
I No EJB found with interface of type Java Basics - Anfänger-Themen 12
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say Abstrakt oder Interface Java Basics - Anfänger-Themen 3
Say public/default Interface Java Basics - Anfänger-Themen 9
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
I Browser integriert in Desktop Applikation - Webcam interface not found Java Basics - Anfänger-Themen 26
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
J Interface Comparable<T> Java Basics - Anfänger-Themen 10
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
D Interface Verständisfrage Java Basics - Anfänger-Themen 8
U Interface | constructor injection Java Basics - Anfänger-Themen 5
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
T Interface Map und Map.Entry Java Basics - Anfänger-Themen 4
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
I JSON und Interface Java Basics - Anfänger-Themen 3
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
L Interface & Comparable Java Basics - Anfänger-Themen 15
T Interface Java Basics - Anfänger-Themen 0
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
A Interface Kuddelmuddel Java Basics - Anfänger-Themen 4
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
H abstract und interface Java Basics - Anfänger-Themen 4
F Interface Casting Java Basics - Anfänger-Themen 13
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
H Interface Java Basics - Anfänger-Themen 2
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
B Interface vs Abstract Java Basics - Anfänger-Themen 2
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
J OOP Wie sollte ich das organisieren (Abstract? Interface?) Java Basics - Anfänger-Themen 33
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
E Interface nur von abstrakter Klasse implementierbar?! Java Basics - Anfänger-Themen 1
J Vererbung Abstrake Klasse <-> Interface Java Basics - Anfänger-Themen 5
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
N Interface Interface Erstellung Java Basics - Anfänger-Themen 3
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
K Interface: wie damit arbeiten Java Basics - Anfänger-Themen 4
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
T Vererbung Interface Java Basics - Anfänger-Themen 5
F Interface aus anderem Package nutzen Java Basics - Anfänger-Themen 10
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37
B Erste Schritte Wie definiere ich in Java ein Interface? Java Basics - Anfänger-Themen 6
L OOP Interface Prinzip? Java Basics - Anfänger-Themen 6
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
J Innerhalb Interfacemethode: Interface als Attribut Java Basics - Anfänger-Themen 2
A Frage zu Interface Java Basics - Anfänger-Themen 16
J Interface Java Basics - Anfänger-Themen 3
W Interface Java Basics - Anfänger-Themen 1
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
Shams Kann man von einem Interface aus auf die dieses implementierende Klasse zugreifen? Java Basics - Anfänger-Themen 4
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
J Frage zu dem Thema interface Java Basics - Anfänger-Themen 5
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
S Interface-Methode abrufen? Java Basics - Anfänger-Themen 2
G Vererbung Klasse erbt von abstrakter Klasse implementiert Interface Java Basics - Anfänger-Themen 2
M Konstanten in einem Interface definieren Java Basics - Anfänger-Themen 1
P interface Java Basics - Anfänger-Themen 1
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
M Interface als Datentyp Java Basics - Anfänger-Themen 12
K Interface Methoden überschreiben Java Basics - Anfänger-Themen 1
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben