Wissenswertes zu Java Interfaces

Marja-Liisa Jöckel

Über Interfaces

Schnittstellen werden in Java verwendet, um eine Referenz zu definieren, die ggf. aus abstrakten Methoden, konstanten Werten oder anderen verschachtelten Reference Types bestehen. Sie können nicht instanziiert, sondern ausschließlich durch eine konkrete Klasse oder von einem anderen Interface implementiert werden.

Während eine Klasse nur eine andere Klasse erweitern kann, können allerdings mehrere Schnittstellen implementiert werden, wodurch man in Java Mehrfachvererbung erreicht. Denn Schnittstellen machen es möglich, ein bestimmtes Verhalten für eine implementierte Klasse umzusetzen.

Arbeiten mit Interfaces

Implementiert eine Klasse eine Schnittstelle, müssen für alle Methoden eine konkrete Implementierung vorliegen.

public interface TestInterface{

public void testMethodOne();
public void testMethodTwo();
public void testMethodThree;
}  

Besitzt, wie bei obigen Beispiel, eine Schnittstelle drei Methoden, müssen diese in der Klasse implementiert werden. Enthält ein Interface lediglich konstante Variablen, müssen diese als public, static und final deklariert sein.

Wenn eine Schnittstelle eine andere erweitert

Bei der Erweiterung einer Schnittstelle werden alle Methoden und Konstanten des Interfaces an das andere vererbt.

public interface TestInterface{
public static final int CONSTANT1=1;
int CONSTANT2=2;
public void testMethodOne();
}

public interface NewTestInterface extends TestInterface{
public void newTestMethod();
}  

Bei obigen Beispiel erweitert NewTestInterface TestInterface und deklariert eine neue Methode. Folglich muss in der Klasse nicht nur die Methode newTestMethod() sondern ebenfalls die Methode testMethodOne() deklariert sein, die bereits in TestInterface eingeführt wurde.

Wenn eine abstrakte Klasse eine Schnittstelle implementiert

Wenn eine abstrakte Klasse eine Schnittstelle implementiert, kann diese sämtliche, einige oder keine der Methoden, die im Interface deklariert wurden, bereitstellen.

public interface InterfaceToBeImplemented{
public void testMethodOne();
public void testMethodTwo();
public void testMethodThree();
}

abstract class ThisIsAnAbstractClass implements InterfaceTobeImplemented{
public void testMethodOne(){/*implementation code goes here*/};
public void testMethodThree(){/*implementation code goes here*/};  

Im obigen Beispiel stellt die abstrakte Klasse eine Implementierung für testMethodOne() und testMethodThree() aber nicht für testMethodTwo() bereit. Das Snippet wird ohne die Ausgabe von Fehlern kompiliert. Wenn allerdings eine konkrete Klasse ThisIsAnAbstractClass erweitern würde, müsste eine Implementierung von testMethodTwo existieren.

Wesentliche Unterschiede zwischen Schnittstellen und abstrakten Klassen

Der Hauptunterschied zwischen Schnittstellen und abstrakten Klassen ist, dass abstrakte Klassen eine oder mehrere abstrakte Methoden oder auch eine oder mehrere implementierte Methoden besitzen können. Schnittstellen beinhalten ausschließlich abstrakte Methoden.

Während Klassen Klassenvariablen enthalten, können Schnittstellen lediglich Konstanten enthalten.

Zudem kann eine Klasse mehr als ein Interface implementieren, allerdings nur eine abstrakte Klasse erweitern.

Geschrieben von
Marja-Liisa Jöckel
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.