Java Interfaces sind ein Schlüsselelement der objektorientierten
Programmierung, um Abstraktion zu ermöglichen.
Im Gegensatz zu Superklassen enthalten sie nie konkrete
Implementierungen, sondern definieren nur das zu implementierende
Verhalten. Definieren heißt hier, dass nur eine Methode erwähnt wird,
die dann von der konkreten Klasse in jedem Fall implementiert
werden muss.
Ein großer Vorteil von Interfaces ist die Möglichkeit der
Mehrfachvererbung, was Flexibilität in der Gestaltung des Programms
ermöglicht. Sie werden verwendet, wenn verschiedene, nicht verwandte
Klassen das gleiche Verhalten teilen sollen, ohne eine starre
Vererbungshierarchie aufzubauen.
Genau wie eine abstrakte Superklasse wird ein Interface nicht
instanziiert, d.h. es wird kein Objekt direkt aus einem Interface
mithilfe des new gebildet. Es gibt aber auch Unterschiede.
Im Gegensatz zu Klassen können Interfaces mehrfach implementiert werden,
wodurch eine Flexibilität entsteht, die Superklassen nicht bieten.
Superklassen sind ideal, wenn es um Code-Wiederverwendung geht, während
Interfaces zur Definition von Verhalten verwendet werden.
Ein Interface bringt nur Attribute mit folgenden Eigenschaften mit:
static, d.h. das Attribut ist eine sog. Klassenvariable und giltfinal, d.h. das Attribut ist nicht veränderbar - sprich: es istDie sonst üblichen Attribute müssen in der jeweiligen Klasse
implementiert werden.
Interfaces verwenden das Schlüsselwort interface.
Eine Klasse, die das Interface implementiert, verwendet das
Schlüsselwort implements.
// Definition des Interface
public interface Saeugetier{
public boolean hatLunge = true; // Nur Deklarierung von Konstanten (public, static, final)
// Methoden ohne Implementierung
void sound(); // kein Methodenkoerper
void sleep(); // auch kein Methodenkoerper
}
Eine Klasse, die ein Interface implementiert verwendet - wer
hätte es gedacht - das Schlüsselwort implements.
// Klasse Dog implementiert das Interface Saeugetier
class Dog implements Saeugetier{
// Implementierung der Methoden des Interface
public void sound() {
System.out.println("Der Hund bellt");
}
public void sleep() {
System.out.println("Der Hund schläft");
}
}
Und noch eine Klasse, die das Interface mithilfe des
Schlüsselworts implements implementiert.
// Klasse Cat implementiert ebenfalls das Interface Saeugetier
class Cat implements Saeugetier{
// Implementierung der Methoden des Interface
public void sound() {
System.out.println("Die Katze miaut");
}
public void sleep() {
System.out.println("Die Katze schläft");
}
}