Zweck von Interfaces immer noch nicht klar

Java_Newb

Mitglied
Hallo,

ich habe schon unter der FAQ-Übersicht das Thema "Interfaces" durchgelesen, aber bin nicht wirklich schlau daraus geworden.
Sorry also, wenn ich die Frage hier nochmal stelle:

Wenn ich zwei Klassen A und B habe, ist es ja nicht möglich, dass Klasse C von beiden Klassen A und B erbt (Mehrfachvererbung nicht möglich).
Daher erbt Klasse C z. B. von Klasse A und implementiert das Interface D. Was bringt es mir aber eine abstrakte Methode zu implementieren, wenn ich die Methode sowieso in der Klasse C definieren muss, sobald ich das Schlüsselwort "implements" benutze?
Ich werde echt nicht schlau daraus.

Ich hoffe, einer kann es mir anschaulich erklären.
 

httpdigest

Top Contributor
Warum möchte man generell Interfaces haben? => Abstraktion!
In objektorientierten Sprachen wie Java wird Abstraktion durch Subtyping realisiert.
Das heißt, du kannst von einer konkreten Klasse abstrahieren und dem Client (Nutzer deiner Klasse) einfach eine abstraktere "Sicht" auf deine Klasse über ein implementiertes Interface geben.
Bestes Beispiel ist hier z.B. das Java Collections API mit java.util.List und möglichen Implementierungen wie etwa java.util.ArrayList oder java.util.LinkedList, je nachdem, welche Laufzeitkomplexität du für verwendete Operationen benötigst.
Du abstrahierst mit einem Interface also eine konkrete Implementierung weg.
Anderes Beispiel: java.lang.Comparable. Dieses Interface definiert nur einen Kontrakt/Vertrag, was die Operation compareTo im Allgemeinen tun soll. Jetzt gibt es hunderttausende mögliche Implementierungen, um jeweils konkrete Klassen miteinander zu vergleichen, die eben durch konkrete Klassen, die Comparable implementieren, festgelegt wird.
Ein Algorithmus, der z.B. Sortierung implementiert, muss nun nicht mehr für jede zu sortierende Klasse extra geschrieben werden, sondern muss nur durch java.lang.Comparable bekannt gegeben werden, wie zwei Instanzen einer Klasse zu vergleichen sind.
 

White_Fox

Top Contributor
Ein kleines Beispiel zur Verdeutlichung:

Du hast einen Vererbungsbaum Landfahrzeuge:
Java:
public class LandVehicle{
 
    public void drive(){
        //...
    }
}

//Von dieser Klasse werden jetzt weitere Klassen abgeleitet:

public class Truck extends LandVehicle{}

public class Car extends LandVehicle{}

public class Tank extends LandVehicle{}

Und du hast noch einen ganz anderen Vererbungsbaum, nämlich Fluggeräte:

Java:
public class Aircraft{
 
    public void fly(){
        //...
    }
}

//Von dieser Klasse werden jetzt weitere Klassen abgeleitet:

public class Helicopter extends Aircraft{}

public class Rocket extends Aircraft{}

public class Plane extends Aircraft{}


So weit, so gut, das kennst du alles.
Aber: jetzt möchtest du auch einen Amphibienpanzer und ein Wasserflugzeug haben:

Java:
public class AmphibiousTank extends LandVehicle{
    //...
}

public class SeaPlane extends Aircraft{
    //...
}

Jetzt willst du auch mit den beiden neuen Klassen ja auch irgendwie arbeiten. Und du willst ganz sicher nicht für jede der beiden Klassen getrennte Methoden schreiben oder sonstwie ständig zwischen den Klassen unterscheiden. Auch wenn ein Fluggerät und ein Landfahrzeug völlig verschiedene Dinge sind haben sie etwas gemeinsam: Sie können (auch) schwimmen, und das möchtest du gefälligst abbilden, damit du diese Geräte auch auf einem Wasserparkplatz abstellen kannst.

Wir erstellen einfach mal eines für alles, was schwimmen kann:
Java:
public Interface Swimmable{
    public void swimm(double destX, double destY);    //XY-Koordinaten
}

Unsere beiden Klassen Wasserflugzeug und Amphibienpanzer müssen dieses jetzt implementieren:
Java:
public class AmphibiousTank extends LandVehicle implements Swimmable{
    public void swimm(double destX, double destY){
        //...Implementierung...
    }
}

public class SeaPlane extends Aircraft implements Swimmable{
    public void swimm(double destX, double destY){
        //...Implementierung...
    }
}

Und nun werden Interfaces ganz großartig, denn jetzt kannst du einfach Folgendes machen:

Java:
public class Harbour{
    //...
 
    public void bringVehicleToParkposition(Swimmable vehicle){
        vehicle.swimm(2, 3);
    }
 
    //...
}

Oder für andere Beispiele: Schaue dir mal verschiedene Entwurfsmuster an. Die direkte Übersetzung Schnittstelle kannst du eigentlich immer wörtlich nehmen.


Oder mein Lieblingsentwurfsmuster:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
S ich begreife es einfach nicht -> zweck der Schnittstellen Java Basics - Anfänger-Themen 27
N Methode erfüllt nicht den zweck (Call by value) Java Basics - Anfänger-Themen 17
B Zweck eines Codeabschnittes? Java Basics - Anfänger-Themen 3
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
M Wozu dient Interfaces? Java Basics - Anfänger-Themen 6
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
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
M Vererbung Problem bei Interfaces Java Basics - Anfänger-Themen 8
H Dynamische Bindung mit Interfaces und LinkedList Java Basics - Anfänger-Themen 7
F Interfaces Java Basics - Anfänger-Themen 4
M Frage zu Interfaces Java Basics - Anfänger-Themen 3
N Generics und Interfaces Java Basics - Anfänger-Themen 5
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
P OOP Aufruf eines Interfaces Java Basics - Anfänger-Themen 4
N OOP Vererbung von Interfaces Java Basics - Anfänger-Themen 12
S Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 2
D Sinn von Interfaces - Wozu? Java Basics - Anfänger-Themen 9
P Frage zu Interfaces Bsp. Java Basics - Anfänger-Themen 9
A Deklarationen in abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 11
R Adapterklassen vs Interfaces Java Basics - Anfänger-Themen 6
P Interfaces -> eins oder mehrere für eine Anwendung? Java Basics - Anfänger-Themen 9
2 Interfaces, Polymorphie und Methoden. Java Basics - Anfänger-Themen 14
A Obstlager Interfaces Java Basics - Anfänger-Themen 7
K Theor. Frage zu Interfaces Java Basics - Anfänger-Themen 30
T Frage zu Interfaces und Abstrakten Klassen Java Basics - Anfänger-Themen 4
J Interfaces Java Basics - Anfänger-Themen 14
L Interfaces Java Basics - Anfänger-Themen 5
J spiel "Gefangenendilemma" Probleme mit Interfaces Java Basics - Anfänger-Themen 8
H Interfaces in java? Java Basics - Anfänger-Themen 2
A OOP Interfaces mit gleichem Methoden Java Basics - Anfänger-Themen 15
T Interfaces: Braucht man abstrakte Klassen eigentlich noch? Java Basics - Anfänger-Themen 3
S Implementierung gegen Interfaces / List, ArrayList, LinkedList Java Basics - Anfänger-Themen 11
D Interfaces / Schnittstellen Java Basics - Anfänger-Themen 8
I Probleme mit Interfaces Java Basics - Anfänger-Themen 4
K Interfaces "Schreibaufwand" Java Basics - Anfänger-Themen 53
I Interfaces Java Basics - Anfänger-Themen 34
bigbasti Warum genau braucht man Interfaces? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben