Whouzuo: Sinn Interfaces?

Beitrag lesen

Mehr Sinn würde es für mich machen, wenn die Funktion im Interface schon etwas "macht" und man in der jeweiligen Funktion nicht nochmals die Funktion schreiben muss.

Wie würdest du das bei flugfähigen Objekten machen? Nehmen wir an es gibt ein Wettfliegen. Alles, was irgendwie aus eigenem Antrieb fliegen kann, darf teilnehmen. Das sind also Menschen mit einem Jetpack, Vögel, Flugzeuge und Baumsamen.
Da kannst du keine Methode fliegen() für all diese Teilnehmer schreiben, denn was sollte darin stehen? "Schlage mit den Flügeln"? Oh warte, ein Jetpack hat keine Flügel. Und Flugzeuge schlagen nicht mit den Flügeln.
Trotzdem willst du, dass du als Wettkampfleiter eine Garantie hast, das der Teilnehmer wirklich fliegen kann und nicht einfach abstürzt (wäre nicht so gut für deinen Ruf...).
Daher müssen alle deine Teilnehmer das Interface "Flugfähig" implementieren (so wie sie eben Fliegen) und voilá, du bist abgesichtert.

Natürlich kann es passieren, dass ein Teilnehmer in seiner durch das Interface vorgeschriebenen fliegen() Methode nur Quatsch drin stehen hat - dann betrügt er allerdings das Interface und hält sich nicht an die Dokumentation, die ja besagt, dass er fliegen können muss.

Etwas ähnliches passiert, wenn du beispielsweise in Java die equals Methode anpasst, aber hashcode nicht ebenfalls an die Änderungen anpasst. Das darfst du nicht, denn das kann zu Fehlern führen, was aber nur in der Doku steht; d.h. der Compiler meckert nicht, aber es führt zu logischen Fehlern - genau wie beim Fliegen. Nachher stürzt dein Programm nämlich ab. :P

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#equals%28java.lang.Object%29