Schnittstellen
Bewegliche Graphikobjekte public interface Beweglich { /** * Verschiebe das Graphikobjekt um den Vektor (dx|dy) * * @param dx Die Verschiebung in x-Richtung. * @param dy Die Verschiebung in y-Richtung. */ void verschiebe (int dx, int dy); } Eine Schnittstelle verhält sich in Java ähnlich wie eine abstrakte Oberklasse. Alle Methoden sind automatisch public abstract. Jede Klasse kann nur eine direkte Oberklasse haben, aber zu beliebig vielen Schnittstellen gehören. Schnittstellen sind besonders sorgfältig zu kommentieren, damit fremde Programmierer ihre Funktionsweise sofort verstehen. Insbesondere sind auch die Parameter mit @param klar zu beschreiben, damit die automatische Dokumentation keine Fragen unbeantwortet lässt.
Implementierung der Schnittstelle public abstract class Person implements Beweglich { […] /** * Verschiebe die Person um den Vektor (dx|dy). */ public void verschiebe (int dx, int dy) haupthaar.verschiebeWaagrecht (dx); namensschild.verschiebeSenkrecht (dy); } Mit implements ordnet sich eine Klasse einer Schnittstelle unter. Die Klasse muss dann entweder selbst oder in ihren Unterklassen alle Methoden der Schnittstelle ausdrücklich ausprogrammieren („implementieren“).
Alternde Graphikobjekte public interface Alternd { /** * Lass das Graphikobjekt alt aussehen. */ void werdeAlt (); } public abstract class Person implements Beweglich, Alternd […] public void werdeAlt () macheUnsichtbar (); haupthaar.setzeFarbe ("grau"); langhaar.setzeFarbe ("grau"); macheSichtbar (); Eine Klasse kann mehrere Schnittstellen implementieren.
Stilwechselnde Graphikobjekte public interface Stilwechselnd { /** * Nimm festliche Gestalt an. */ void werdeFestlich (); * Nimm gewöhnliche Gestalt an. * * @param farbe Farbe, die das Graphikobjekt annehmen soll. void werdeGewoehnlich (String farbe); * Gib an, ob das Graphikobjekt festlich gestaltet ist. * @return True, wenn festlich gestaltet, sonst false. boolean istFestlich (); } Mit @return schreibt man Informationen zum Rückgabewert einer Methode in die automatische Dokumentation.
Stilwechselnde Männer public class Mann extends Person implements Stilwechselnd { [...] /** * Gib an, ob ich festlich gekleidet bin. Prüfe also, ob mein * Anzug und meine Schuhe schwarz sind und mein Hemd grau ist. * * @return True, wenn festlich gekleidet, sonst false. */ public boolean istFestlich () return jacket.gibFarbe ().equals ("schwarz") && hose.gibFarbe ().equals ("schwarz") && rock.gibFarbe ().equals ("grau") && schuh1.gibFarbe ().equals ("schwarz") && schuh2.gibFarbe ().equals ("schwarz"); } Eine Klasse kann sowohl Unterklasse sein als auch eine oder mehrere Schnittstellen implementieren.
Klassendiagramm Person Auto Baum Frau Mann Beweglich Stilwechselnd Alternd Person Auto Baum Frau Mann Vererbungspfeile zeichnen wir durchgehend, Schnittstellenimplementierungen gestrichelt. Das Diagramm zeigt, dass Klassen mehrere Schnittstellen implementieren können.