Ich bin ziemlich viel Java-Anfänger, und ich bin gekommen, Stackoverflow Forum für eine einfache Frage zu stellen. Ich habe bereits eine ähnliche Frage hier auf SO überprüft, aber ich habe nicht die gewünschte Antwort gefunden, LINK: Gibt es eine Beziehung zwischen der Klasse, die die Schnittstelle und diese Schnittstelle implementiert?
Wir wissen, ob Katze Tier ausdehnt, es gibt hier eine Beziehung. Also Katze ist ein Tier (aber nicht unbedingt anders. Tier ist auch ein Hund ..). Wir kennen diese Beziehung als "ist-a" - Vererbung .
Wenn wir noch zwei Klassen haben: Girl und Candy und wenn die Klasse Girl Candy enthält, dann nennen wir diese Beziehung "has-a" - Zusammensetzung , weil wir sagen können, dass Mädchen eine Süßigkeit hat.
Korrigiere mich, wenn ich mit den obigen Beispielen etwas falsch gemacht habe.
Wie auch immer, meine Frage ist, ob es eine Beziehung zwischen Objekten von Klassen gibt, die dieselbe Schnittstelle implementieren? Sagen wir:
%Vor%Wenn es eine Beziehung gibt, wie können wir diese Beziehung nutzen? Vielen Dank für Ihre Antworten im Voraus ..
EDIT: Für diejenigen, die denken, dass es keine Beziehung gibt, habe ich ein Buch "Java, wie neunte Ausgabe zu programmieren" und es gibt ein UML-Diagramm, das Klassen zeigt, die gleiche Schnittstelle in "Beziehung" implementiert?
Bild:
Es gibt keine Beziehung zwischen den Objekten, die dieselbe Schnittstelle implementieren. Beide sind eigenständige Implementierungen. Sie folgen nur dem Protokoll, das durch Schnittstelle definiert wird.
Wenn Sie versuchen, von einem Objekttyp zu einem anderen Objekttyp zu wechseln, erhalten Sie ClassCastException
.
BEARBEITEN:
Ihr UML-Diagramm legt nahe, dass eine Beziehung zwischen Interface und Klasse (IS-A) besteht, aber nicht zwischen den beiden Klassen, die dieselbe Schnittstelle implementieren. Es gibt keine Linie mit Beziehungssymbol zwischen den Klassen (wie Sie zwischen Klasse und Schnittstelle sehen)
Dies bedeutet, dass Ihre Klassen ein ähnliches Verhalten haben, das von den Schnittstellenmethoden beschrieben wird.
Betrachten Sie zum Beispiel zwei Klassen: Fish
und Bird
. Beide können die Schnittstelle Moveable
like:
Sie können das von Schnittstellenmethoden angegebene Verhalten wie folgt aufrufen:
%Vor%So kann sich jeder von ihnen bewegen, obwohl die Art, wie sie sich bewegen, sehr unterschiedlich ist. Auf diese Weise teilen beide Klassen gemeinsames Verhalten, obwohl ihre Implementierung Ihnen möglicherweise unbekannt ist.
Die Beziehung zwischen einer Klassenimplementierung und -schnittstelle und der Schnittstelle ist auch eine "ist-a" -Beziehung, genauso wie die Erweiterung von einer Klasse.
Es ist nützlich (oder zumindest ein Grund, warum es nützlich ist), da Sie eine Schnittstelle bereitstellen können, anstatt eine Implementierung dieser Schnittstelle zu codieren. So können Sie Ihre Implementierungen einfach austauschen (wenn es nötig ist) vorbei mit dem Minimum an Aufregung.
Beachten Sie, dass wenn Sie die Vererbungshierarchie "über" gehen, also die Beziehung zwischen zwei Klassen betrachten, die dieselbe Schnittstelle erben, gibt es hier überhaupt keine implizite Beziehung.
Es gibt keinen formellen Namen für die Beziehung zwischen zwei Klassen, die dieselbe Schnittstelle implementieren.
Oder, in der Tat, die die gleiche Basisklasse erweitern. Wenn ein Kind, das ein anderes Kind ausdehnt, sein Kind ist, dann sind zwei Kinder derselben Klasse Geschwister, aber das ist kein Begriff, der allgemein verwendet wird.
Wenn Sie diese anthropomorphe Metapher auf Interfaces ausdehnen möchten, könnten Sie vielleicht zwei Implementierungen einer Schnittstelle ähnlich sehen.
Tags und Links java relationship