Ein Interface ist, wie der Name schon sagt, eine Schnittstelle. Es ist damit eine Art Vertrag. Eine Klasse, die ein Interface implementiert, garantiert, die von der Schnittstelle geforderten Methoden zur Verfügung zu stellen.
Beispiel:
Das Interface "List<>" legt fest, welche Methoden eine Liste erfüllen muss. Konkrete Implementationen, die intern auch völlig unterschiedlich arbeiten können, sind:
ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector
Der Vorteil des Interface ist dabei, dass du die konkrete Implementation in deinem Programm, je nach Bedarf, wählen und auch ändern kannst:
[CODE=java]
List<String> liste = new ArrayList<>();
// "liste" ist vom Typ des Interfaces, wenn dir ArrayList später nicht mehr passt,
// kannst du einfach eine andere Klasse instantiieren, die List<> implementiert.
// Das Programm arbeitet nur mit den von List<> garantierten Methoden und funktioniert.[/CODE]
Außerdem kann eine Klasse mehrere Interfaces implementieren.
[CODE=java]
class Foo implements InterfaceA, InterfaceB {
// code...
}
Foo foo = new Foo(); // geht
InterfaceA a = new Foo(); // geht auch
InterfaceB b = new Foo(); // geht auch
// nehmen wir eine Methode an, die als Parameter InterfaceA verlangt
void doSomethingWithA(InterfaceA a) {
// code..
}
doSomethingWithA(foo); // geht
// oder eine, die InterfaceB als Parameter verlangt
void doSomethingWithB(InterfaceB b) {
// code..
}
doSomethingWithB(foo); // geht auch
[/CODE]