Einstieg in die Informatik mit Java Schnittstellen Gerd Bohlender Institut für Angewandte und Numerische Mathematik 1 / 13 Gliederung 1 Einführung 2 Definition einer Schnittstelle 3 Implementierung einer Schnittstelle 4 Vergleich zu abstrakten Klassen 2 / 13 Gliederung 1 Einführung 2 Definition einer Schnittstelle 3 Implementierung einer Schnittstelle 4 Vergleich zu abstrakten Klassen 3 / 13 Einführung In Java gibt es keine Mehrfachvererbung, da diese zu unübersichtlichen und fehleranfälligen Klassenhierarchien führen kann. Achtung 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. 4 / 13 Gliederung 1 Einführung 2 Definition einer Schnittstelle 3 Implementierung einer Schnittstelle 4 Vergleich zu abstrakten Klassen 5 / 13 Definition einer Schnittstelle Syntax i n t e r f a c e Name { . . . / / nur Konstanten , k e i n e V a r i a b l e n ! . . . / / nur a b s t r a k t e Methoden , k e i n e Implementierung ! } Syntax abstrakte Methode Modifizierer Ergebnistyp Methodenname (formale Argumentliste); • Abstrakte Methoden deklarieren nur die Methode. • Sie besitzen keinen Anweisungsteil. • Die Definition der Methoden muss später bei der Implementierung der Schnittstelle erfolgen. • Eine Schnittstelle stellt einen Kontrakt dar, der von der Implementierung erfüllt werden muss. 6 / 13 Eigenschaften von Schnittstellen • Schnittstellen können keine Instanzen bilden, • Referenzen sind allerdings erlaubt. Beispiel interface Funktion { double auswerten ( double x ) ; } Beispiel Verwendung in einer Methode: void ausgeben ( F u n k t i o n f , double x ) { System . o u t . p r i n t l n ( f . auswerten ( x ) ) ; } 7 / 13 Gliederung 1 Einführung 2 Definition einer Schnittstelle 3 Implementierung einer Schnittstelle 4 Vergleich zu abstrakten Klassen 8 / 13 Implementierung einer Schnittstelle • 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. Syntax class D extends Superklasse implements I1 , I 2 { . . . } Achtung Ähnlich wie Klassen können Schnittstellen eine Vererbungshierarchie bilden. Dabei ist Mehrfachvererbung erlaubt! i n t e r f a c e I n t e r extends I1 , I2 , I 3 { . . . / / w e i t e r e Konstanten , Methoden−D e k l a r a t i o n e n } 9 / 13 Beispiel Funktion, Fortsetzung Beispiel class Xhoch3 implements F u n k t i o n { public double auswerten ( double x ) { r e t u r n x ∗x ∗x ; } } Beispiel Verwendung in main: Funktion f ; / / nur Referenz / / I n s t a n z e i n e r Implementierung der S c h n i t t s t e l l e b i l d e n f = new Xhoch3 ( ) ; / / Typen werden angepasst double d i f f e r e n z = f . auswerten ( 2 ) − f . auswerten ( 1 ) ; ausgeben ( f , 5 ) ; // 10 / 13 Eigenschaften • Alle Methoden einer Schnittstelle sind public abstract. Dies braucht nicht explizit angegeben zu werden. • Widersprüchliche Angaben wie z.B. final, protected 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. 11 / 13 Gliederung 1 Einführung 2 Definition einer Schnittstelle 3 Implementierung einer Schnittstelle 4 Vergleich zu abstrakten Klassen 12 / 13 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. 13 / 13