Schnittstellen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 1/7 Übersicht 1 Einführung 2 Eigenschaften 3 Vergleich zu abstrakten Klassen G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 2/7 Einführung Im Gegensatz zu C++ gibt es in Java keine Mehrfachvererbung, da diese zu unübersichtlichen und fehleranfälligen Klassenhierarchien führen kann. Nicht erlaubt ist also class A extends B, C { ... } G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 3/7 Einführung Im Gegensatz zu C++ gibt es in Java keine Mehrfachvererbung, da diese zu unübersichtlichen und fehleranfälligen Klassenhierarchien führen kann. Nicht erlaubt ist also class A extends B, C { ... } Manchmal ist es allerdings sinnvoll, mehrere Basisschnittstellen zu implementieren. Eine Klasse soll z.B. von der Klasse Applet abgeleitet sein und zusätzlich die Eigenschaften der Schnittstelle Runnable besitzen. Dafür gibt es das Konzept der Schnittstellen: Statt class wird hier interface verwendet. G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 3/7 Einführung Im Gegensatz zu C++ gibt es in Java keine Mehrfachvererbung, da diese zu unübersichtlichen und fehleranfälligen Klassenhierarchien führen kann. Nicht erlaubt ist also class A extends B, C { ... } Manchmal ist es allerdings sinnvoll, mehrere Basisschnittstellen zu implementieren. Eine Klasse soll z.B. von der Klasse Applet abgeleitet sein und zusätzlich die Eigenschaften der Schnittstelle Runnable besitzen. Dafür gibt es das Konzept der Schnittstellen: Statt class wird hier interface verwendet. G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 3/7 Einführung Syntax interface Name { ... //nur Konstanten, keine Variablen! ... //nur abstrakte Methoden, keine Implementierung! } Schnittstellen können keine Instanzen bilden, Referenzen sind allerdings erlaubt. Eine Klasse kann eine oder mehrere Schnittstellen implementieren: Dabei müssen alle Methoden der Schnittstellen implementiert werden, ansonsten ist die Klasse abstrakt und muss durch abstract als solche gekennzeichnet werden. G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 4/7 Einführung Syntax interface Name { ... //nur Konstanten, keine Variablen! ... //nur abstrakte Methoden, keine Implementierung! } Schnittstellen können keine Instanzen bilden, Referenzen sind allerdings erlaubt. Eine Klasse kann eine oder mehrere Schnittstellen implementieren: Dabei müssen alle Methoden der Schnittstellen implementiert werden, ansonsten ist die Klasse abstrakt und muss durch abstract als solche gekennzeichnet werden. G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 4/7 Eigenschaften Syntax class D extends Superklasse implements I1, I2 { ... } Achtung Ähnlich wie Klassen können Schnittstellen eine Vererbungshierarchie bilden. Dabei ist Mehrfachvererbung erlaubt! interface Inter extends I1, I2, I3 { ... // weitere Konstanten, Methoden-Deklarationen } G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 5/7 Eigenschaften Syntax class D extends Superklasse implements I1, I2 { ... } Achtung Ähnlich wie Klassen können Schnittstellen eine Vererbungshierarchie bilden. Dabei ist Mehrfachvererbung erlaubt! interface Inter extends I1, I2, I3 { ... // weitere Konstanten, Methoden-Deklarationen } G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 5/7 Eigenschaften Alle Methoden einer Schnittstelle sind public abstract. Dies braucht nicht explizit angegeben zu werden. Widersprüchliche Angaben wie z.B. final oder private sind verboten. Alle Datenfelder einer Schnittstelle sind public static final. Dies braucht ebenfalls nicht explizit angegeben zu werden. Angaben wie z.B. private oder protected sind verboten. G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 6/7 Eigenschaften Alle Methoden einer Schnittstelle sind public abstract. Dies braucht nicht explizit angegeben zu werden. Widersprüchliche Angaben wie z.B. final oder private sind verboten. Alle Datenfelder einer Schnittstelle sind public static final. Dies braucht ebenfalls nicht explizit angegeben zu werden. Angaben wie z.B. private oder protected sind verboten. G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 6/7 Vergleich zu abstrakten Klassen Schnittstelle abstrakte Klasse alle Methoden implizit abstrakt Mischung abstrakte/implementierte Methoden erlaubt Variablen, Konstanten, usw. erlaubt Einfachvererbung Instanziierbare Klasse muss alle abstrakten Methoden überschreiben. nur Konstanten erlaubt Mehrfachimplementierung Instanziierbare Klasse muss alle Methoden des Interfaces implementieren. G. Bohlender (IANM – UNI Karlsruhe) Schnittstellen 13.06.07 7/7