Interfaces – Verwendung von Schnittstellen

Wie Java unterstützt auch C# keine Mehrfachvererbung.
Den Entwicklern der Programmiersprache war dieser Umstand als auch die Nachteile, die diese mit sich bringt, bekannt:

* Vererbungshierarchie kann sehr undurchsichtig werden
* Namenskonflikte
* wiederholte Vererbung

Trotzdem wollten sie auf die Mehrfachvererbung nicht verzichten und schafften mit dem Interface einen Mittelweg.
Interfaces können als Ersatzkonstrukt für die Mehrfachvererbungen gesehen werden.
Die Deklaration eines Interfaces ähnelt der einer Klasse.
Als Konvention hat man sich in C# z.B. darauf geeinigt, dass alle Interfaces mit einem ‘I’ beginnen. (#1)

Eine Klasse kann mehrere Interfaces implementieren, d.h. dieser können mehrere Schnittstellen zur Verfügung gestellt werden.
Um die Funktionen nutzen zu können, müssen sie aber erst von der Klasse implementiert werden. Das Interface gibt nur die Methodendeklarationen (Rahmen) vor.

“Die Deklaration von Interfaces ist einfach, es muss nur das Schlüsselwort class durch interface ersetzt werden.” (#2)

Der einzige Unterschied zu einer Klasse besteht darin, dass ein Interface keine Implementierungen besitzt, sondern nur Methodenköpfe und Konstanten.
Wenn man darauf angewiesen ist, dass das Objekt bestimmte Verhaltensweisen hat, kann man diese Verhaltensweisen in einem Interface zusammenfassen und den Code gegen das Interface programmieren.
Interfaces werden unter anderem dazu verwendet, um die Spezifikation von Klassen von deren Implementierung zu trennen. Man kann aber auch durch Interfaces die eigentliche Implementierung vor Dritten schützen. Daher kann man auch Interfaces und deren enthaltene Methoden als Kommunikationsschnittstelle benutzen, da durch den Methodenkopf die zu erwartenden Übergabeparameter und der Rückgabewert festgelegt sind.

Die Methoden in einem Interface sind implizit public.
Eine Klasse kann jedoch nur eine einzelne Klasse oder ein Abstrakt erben. Daher können sie durch die Verwendung von Schnittstellen das Verhalten von mehreren Quellen in einer Klasse einbeziehen. Es können jedoch mehrere Interfaces implementiert werden.

* Ein Interface ist veränderbar. Jedoch müssen die Klassen und Objekte, welche das jeweilige Interface implementieren, an den Änderungen des Interfaces angepasst werden.
* Der Code funktioniert mit allen Objekten, die zu einer Klasse gehören, die das Interface implementiert.
* Man kann verschiedene Implementierungen der gleichen Verhaltensweise gegeneinander austauschen.
* Ein Interface beschreibt die zu implementierenden Funktionen eines Objektes.
* Interfaces enthalten im Gegensatz zu abstrakten Klassen keine implementierten Methoden

#1: ISBN-10: 3827322553 Amazon, Seite 204
#2: http://programmierenlernenhq.de/interfaces-in-java 09.06.2017