• Keine Ergebnisse gefunden

17_8338_310_Java Interfaces vs. Klassen

N/A
N/A
Protected

Academic year: 2022

Aktie "17_8338_310_Java Interfaces vs. Klassen"

Copied!
14
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung

unter dem Förderkennzeichen 16OH21005 gefördert.

Die Verantwortung für den Inhalt dieser Veröffentlichung liegt

beim Autor/bei der Autorin.

(2)

Java kennt neben Klassen und Objekten auch das Konzept von „Schnittstellen“.

(engl. Interfaces).

Was es mit den Schnittstellen auf sich hat und was der Unterschied zu den Klassen ist, wollen wir uns in diesem Abschnitt näher ansehen.

(3)

2 In einzelnen wollen wir uns hier mit folgenden Fragen auseinander setzen:

• Was ist ein Interface?

• Wie definiere ich ein Interface?

• Wie wende ich ein Interface an?

• Wann brauche ich ein Interface?

(4)

Schnittstellen kennen wir aus unserem Alltag zur genüge.

In der Abbildung ist auf der rechten Seite ein typisches Beispiel für die Verwendung von Schnittstellen aufgeführt.

Um ein mobiles Gerät an eine Audioanlage anschließen zu können, um Musik abspielen zu können, muss das mobile Geräte irgendwie mit der Audioanlage kommunizieren.

Dies kann zum Beispiel eine USB-Verbindung oder auch eine Bluetooth- Verbindung sein. Die Geräte können dabei selbstverständlich auch von unterschiedlichen Herstellern sein.

Damit dies so funktioniert, ist es wichtig, dass sich beide Seiten an eine vereinbarte Schnittstelle halten.

Genau diese Idee finden wir in Java wieder.

Java bietet nämlich die Möglichkeit an, sogenannte Interfaces zu definieren.

Hierzu sehen wir uns den linken Teil der Abbildung an. Dort sind drei Klassen aufgeführt. Dies sind die Klassen

• Student

• Dozent

(5)

• Mitarbeiter

Möchte man nun erreichen, dass diese Klassen bestimmte Methoden anbieten müssen, dann kann man für diese Methoden ein Interface definieren.

In diesem Fall würde sich anbieten, ein Interface mit dem Namen Person zu definieren.

Hinweis:

Damit man in der Praxis die Namen von Schnittstellen und Klassen einfacher unterscheiden kann, haben sich in der Praxis folgende Namenkonventionen herausgebildet.

• Man stelle dem Namen einer Schnittstelle ein großes „I“ voran. Beispiel: IPerson

• Man hängt an den Namen einer Schnittstelle einen Suffix. Beispiel: PersonInterf

3

(6)

Schauen wie uns zunächst an, wie man eine Schnittstelle definiert.

Die entsprechende Syntax einer Schnittstellendefinition, ist in der Abbildung zu sehen.

Die Definition sieht im wesentlich genau so aus, wie bei einer Klasse. Anstelle des Schlüsselwortes class wird hier das Schlüsselwort interface verwendet.

Eine weitere Besonderheit ist, dass die Methoden keinen Body besitzen. Es ist ja eine Schnittstelle und daher gibt es keine Implementation.

Merke:

Eine Schnittstelle stellt eine Art von Vertrag dar.

Der Aufrufer verpflichtet sich die Schnittstelle genauso zu verwenden, wie in dem Interface definiert.

Die Implementation verpflichtet sich alle Methoden zu implementieren, die im dem Interface defniert sind.

Hinweis:

(7)

* Siehe auch die Hinweise in der Java-Quick-Referenz zu diesem Thema.

4

(8)

Wenn eine Klasse ein bestimmtes Interface implementiert, so wird in der Klassendefinition eine entsprechende Erweiterung eingetragen.

Wie in der Abbildung zu sehen ist, ist hierfür das Schlüsselwort implements notwendig. Nach diesem Schlüsselwort werden dann die Interface-Namen aufgelistet, die in dieser Klasse zur Verfügung gestellt werden.

Am besten sehen wir uns nun ein einfaches Beispiel hierzu an.

(9)

In der Abbildung ist auf der linken Seite ein Beispiel für die Definition eines Interfaces mit dem Namen „IShape“ angegeben.

Wie man sehen kann, sind dort lediglich die Methoden definiert.

Auf der rechten Seite der Abbildung ist ein Beispiel für eine Klasse zu sehen, die dieses Interface implementiert.

Die Klasse Circle implementiert die Schnittstelle „IShape“.

Sie muss daher auch die Methoden implementieren, die durch die Schnittstelle vorgegeben sind.

6

(10)

Die Abbildung zeigt ein typisches Beispiel aus der Praxis.

Wenn wir zum Beispiel Klassen wie „Triangle“ und „Arrow“ haben, dann können beide Klassen als Spezialisierung einer Klasse „Shape“ angesehen werden.

Methoden, die in beiden Subklassen benötigt werden und identisch sind, werden dann in der Super-Klasse „Shape“ implementiert.

Wenn es nun aber Methoden gibt, die in jeder Subklasse unterschiedlich sind, aber in allen Unterklassen vorhanden sein müssen, dass würde man ein Interface wie z.B. „IMoveable“ definieren. Dort würde man z.B. Methoden haben wie resize() oder auch moveTo() definieren. Diese Methoden könnten dann in jeder Klasse individuell implementiert werden.

Der Vorteil eines solchen Design besteht darin, dass eine Klasse, die

Objektreferenzen von „Triangle“ und „Arrow“ Objekten kennt, nicht wissen muss , von welcher Klasse die Objekte sind, Es genügt zu wissen, dass die Objekte die Schnittstelle IMoveable implementieren.

Merke:

Hiermit hat man das Prinzip : Trennung zwischen Schnittstelle und Implementation direkt umgesetzt.

(11)

Merke:

Eine Klasse kann nur eine Superklasse haben, aber sie kann beliebig viele Interfaces implementieren.

7

(12)
(13)

9

(14)

Referenzen

ÄHNLICHE DOKUMENTE

- Geschachtelte Klassen können als privat deklariert werden, so dass sie außerhalb der umfassenden Klasse nicht verwendet werden können. - Geschachtelte Klassen können auf

b) So viel Schnee ist aber nicht vorhanden: Es stehen nur 3 ' 400 m 3 Schnee zur Verfügung.. Dieses Aufgabenblatt muss zusammen mit der Arbeit abgegeben werden. Die

Dieses Aufgabenblatt muss zusammen mit der Arbeit abgegeben werden. Ergebnisse ohne Begründung werden nicht bewertet. Jede Aufgabe muss auf ein separates Blatt gelöst

Das Strassennetz auf der Insel besteht aus einer Ringstrasse, welche ganz ohne Steigung die Insel in der Höhe z = 1.5 umrundet, und aus einer weiteren Strasse, die den

Dieses  Aufgabenblatt  muss  zusammen  mit  der  Arbeit  abgegeben  werden... Dieses  Aufgabenblatt  muss  zusammen  mit  der  Arbeit  abgegeben

• Eine Klassendeklaration kann auch direkt diverse abgeleitete Operationen implementieren, wie z.B. eine Gleichheit, falls es nur ein ≤ gibt... Insofern könnte man damit generisch

Schreiben Sie ein Java-Programm, das eine beliebige Anzahl von double –Werten einliest und so in ein Feld abspeichert, dass gleiche Werte hintereinander angeordnet sind und

 innere Klasse: Die Klasse wird innerhalb einer anderen Klasse definiert..!. (Beachte: der untere, leere Teil wird später