Programmierung
Interfaces in JAVA
Michael Goedicke
Auf der Basis von Folien von Volker Gruhn
Interfaces: Motivation
In der Vorlesungseinheit uber einfache Sortieralgorithmen / Listen Bearbeitung haben wir das Problem betrachtet, Studierende anhand ihres Namens zu suchen oder zu sortieren.
public class Student { private String name; private String firstName;
public int compareTo(Student other) {
} }
Da das Sortieren von Objekten in der Regel darauf basiert, dass Objekte paarweise verglichen werden, benotigen wir die Methode public int compareTo(Student other).
Die fur den Vergleich relevanten Attribute bezeichnen wir als Schlussel, dabei kann eine beliebig groe Menge aller Attribute gewahlt werden
M. Goedicke Programmierung WiSe 2020/2021 2
Interfaces: Motivation
In der Vorlesungseinheit uber Vererbung haben wir gesehen, dass wir Strukturen haben wollen, die unterschiedlich sind, jedoch gemeinsame Eigenschaften besitzen.
Vgl Lego-Bausteine
Es wird Information benotigt, wie die Komponenten nach auen auftreten und was sie benotigen
Bilder aus Wikipedia http://de.wikipedia.org/wiki/Datei:Light_Green_Lego_Brick.jpg bzw http://de.wikipedia.org/wiki/Datei:Lego_dimensions.svg
M. Goedicke Programmierung WiSe 2020/2021 3
Interfaces: Konzept
Komponenten sind in Java hier Klassen und Methoden.
Interfaces konnen fur beide Bereiche angegeben und verwendet
werden
Leider (noch) nicht so elegant wie bei Lego
Es wird Information benotigt, wie die Komponenten nach auen auftreten und was sie benotigen
In Java:
Deklarationen von Signaturen von Methoden Deklarationen von Konstanten
Das geht mit Abstrakten Klassen Interfaces
M. Goedicke Programmierung WiSe 2020/2021 4
Interfaces: Beispiel
Als Ordnungsrelation kann beispielsweise die lexikographische Ordnung gewahlt werden, bzgl. der die Namen z. B. in Telefonbuchern sortiert sind.
Fur zwei Student-Instanzen a und b gilt dabei:
a.compareTo(b) < 0, wenn a bzgl. der gewahlten Ordnungsrelationkleiner als b ist, a.compareTo(b) == 0, wenn a bzgl. der gewahlten Ordnungsrelationgleich b ist, a.compareTo(b) > 0, wenn a bzgl. der gewahlten Ordnungsrelation
groer als b ist.
Vader, Andreas Vader, Barbara Vader, Darth Vollmann, Heike Vollrath, Hans
M. Goedicke Programmierung WiSe 2020/2021 5
Interfaces: Beispiel
Mit Hilfe der compareTo()-Methode kann man ein Student-Array sortieren:
public class BubbleSort {
public void sort(Student[] values) {
int high = values.length 1;
for (int k = high; k > 0; k) {
for (int i = 0; i < k; i++) {if (values[i].compareTo(values[i + 1]) > 0) {
this.swap(values, i, i + 1); }
} }
}
}
Beobachtungen:
Die Methode sort() ist durch den Parameter values vom Typ
Student[] stark an die Klasse Student gekoppelt.
Die einzige Schnittstelle zwischen dem Algorithmus und der Klasse
Student ist die compareTo()-Methode.
M. Goedicke Programmierung WiSe 2020/2021 6
Interfaces: Beispiel (abstrakte Klassen)
Naturlich wollen wir nicht nur Studierende sortieren, sondern z. B. auch Autos.
Um mit einer einzige Methode sowohl Student- als auch Car- Objekte zu sortieren, lagern wir die Spezifikation der Methode
compareTo() in eine abstrakte Klasse aus.
public void sort(Comparable[] values) {
if (values[i].compareTo(values[i + 1]) > 0) { this.swap(values, i, i + 1);
}
}
Comparable
+compareTo(other: Object): int
Student
Car
M. Goedicke Programmierung WiSe 2020/2021 7
Interfaces: Erweiterung & Polymorphie
Wiederholung: Wesentliche Bestandteile objektorientierter Programmiersprachen sind Erweiterung und Polymorphie.
Wenn eine Klasse B von einer Klasse A erbt, dann besitzt jedes Objekt der Klasse B alle in Klasse A definierten Attribute, Assoziationen und Methoden.
Jede Instanz der Klasse B ist vom Datentyp A, d. h. sie kann einer Variablen vom Typ A zugewiesen werden.
Wir unterscheiden zwischen dem statischen Typ, der im Quelltext angegeben ist, und dem dynamischen Typ, welchen das Objekt tatsachlich zur Laufzeit hat.
Vererbungsbeziehungen werden in JAVA uber das Schlusselwort extends angegeben.
public A {
}
public class B extends A {
}
A a = new A(); B b = new B(); a = b;
A
B
M. Goedicke Programmierung WiSe 2020/2021 8
Interfaces: Erweiterung & Polymorphie
In der Klasse B konnen die Methoden aus Klasse A uberschrieben werden.
Wenn in einer Erweiterungshierarchie durch Uberschreiben mehrere Methoden mit gleicher Signatur auftreten, dann wird erst zur Laufzeit bestimmt, welche dieser Methoden auf ein gegebenes Objekt angewendet wird.
public String toString() {
return Ich bin vom Typ A.;
}
A a = new B(); System.out.println(a.toString()); // Ausgabe: Ich bin vom Typ B.
public String toString() {
return Ich bin vom Typ B.;
}
A
+toString():String
B
+toString():String
M. Goedicke Programmierung WiSe 2020/2021 9
Interfaces: Erweiterung & Polymorphie
Methoden konnen mit dem Schlusselwort abstract markiert werden. In diesem Fall wird nur die Signatur, nicht aber die Implementierung der Methode angegeben.
Klassen, die mindestens eine abstrakte Methode enthalten, sind ihrerseits abstrakt. Eine abstrakte Klasse kann nicht instanziiert werden.
Wenn eine Klasse B von einer abstrakten Klasse A erbt und nicht selbst abstrakt ist, dann mussen alle abstrakten Methoden aus Klasse
A in Klasse B implementiert werden.
public abstract class Comparable { public abstract int
compareTo(Object other);
}
public class Student extends Comparable {
}
public class Car extends Comparable {
}
Comparable
+compareTo(other: Object): int
Student
Car
M. Goedicke Programmierung WiSe 2020/2021 10
Interfaces: Erweiterung & Polymorphie
Zusammenfassung: Einer Methode, deren Parameter den Typ Comparable haben, konnen sowohl Student-Objekte als auch Car-
Objekte ubergeben werden.
public void sort(Comparable[] values) {
int high = values.length 1;
for (int k = high; k > 0; k) {
for (int i = 0; i < k; i++) {if (values[i].compareTo(values[i + 1]) > 0) {
} }
}
this.swap(values, i, i + 1);
}
Welche Implementierung der compareTo()-Methode verwendet
wird, entscheidet der dynamische Datentyp der Objekte, die der
sort()-Methode ubergeben werden.
Die abstrakte Klasse Comparable dient lediglich als Datentyp fur die
zu sortierenden Objekte.
M. Goedicke Programmierung WiSe 2020/2021 11
Interfaces: Definitionen
Problem: Da es in JAVA keine Mehrfachvererbung gibt, ist es nicht moglich, einer Klasse auf diese Art und Weise mehrere Datentypen zuzuweisen.
Es existiert das Konzept der Interfaces: eine Klasse kann von einer Oberklasse erben und eine beliebige Anzahl von Interfaces implementieren.
Interfaces werden mit Hilfe des Schlusselworts interface definiert.
public interface
}
Ein Interface besitzt keine Attribute, keine Konstruktoren und ausschlielich abstrakte Methoden mit dem Sichtbarkeitsmodifikator public.
public interface Comparable {
public abstract int compareTo(Object other);
}
M. Goedicke Programmierung WiSe 2020/2021 12
Interfaces: Definitionen
Da die Schlusselworter public und abstract redundant sind, konnen sie in der Methodensignatur weggelassen werden.
public interface Comparable { int compareTo(Object other);
}
In UML werden Interfaces unter Verwendung des Klassensymbols und des sogenannten Stereotyps interface notiert.
interface Comparable
+compareTo(other: Object): int
Interfaces konnen als Datentyp verwendet werden: public void sort(Comparable[] values)
M. Goedicke Programmierung WiSe 2020/2021 13
Interfaces: Definitionen
Die Beziehung zwischen einer Klasse und einem Interface wird uber das Schlusselwort implements hergestellt.
Man sagt, dass eine Klasse C von einer Klasse A erbt, aber ein Interface B implementiert.
public class C extends A implements B {
}
Wenn eine nicht-abstrakte Klasse C ein Interface B implementiert,
dann mussen in C alle Methoden, die in dem Interface vorgegeben
sind, implementiert werden.
Die Instanzen der Klasse C haben dann insbesondere den Datentyp
B, d. h. sie konnen Variablen vom Typ B zugewiesen werden.
M. Goedicke Programmierung WiSe 2020/2021 14
A
C
interface B
Interfaces: Verwendung
public class Student implements Comparable { .. .
public int compareTo(Object o) { Student other = (Student)o;
int val = this.name.compareTo(other.name);
if (val == 0) {
val = this.firstName.compareTo(other.firstName); }
return val; }
}
interface Comparable
+compareTo(other: Object): int
Comparable comp = new Student();
int temp = comp.compareTo(comp);
// temp sollte den Wert 0 haben
Student
M. Goedicke Programmierung WiSe 2020/2021 15
Interfaces: Verwendung
Wenn eine Klasse ein Interface A implementiert, dann durfen Sichtbarkeit und Parameter der Methoden aus A nicht geandert werden.
Verboten: Sichtbarkeit darf Erlaubt: Parameter durfen zwar nicht verringert werden nicht geandert werden, Methoden
durfen aber uberladen werden
Der Ruckgabetyp einer Methode aus A darf spezialisiert werden.
B
-print(text:String)
interface A
+print(text:String)
C
+print(text:String) +print(text:char[])
interface A
+method():Mutter
B
+method():T ochter
M. Goedicke Programmierung WiSe 2020/2021 16
Mutter
T ochter
Interfaces: Mehrfachvererbung
Wiederholung: In JAVA gibt es keine Mehrfachvererbung von Klassen, um Konflikte in der Vererbungshierarchie zu vermeiden.
Vater
tuWas(): void
Mutter
tuWas(): void
T ochter
Konflikt 1: Welche Implementierung der tuWas()-Methode wird vererbt?
A
x:int
Konflikt 2: Wie wird das Attribut x vererbt? Besitzt die Klasse D das Attribut x zweimal? (Diamant-Problem)
B
C
D
M. Goedicke Programmierung WiSe 2020/2021 17
Interfaces: Mehrfachvererbung
In gewisser Weise gibt es in JAVA die Mehrfachvererbung durch Interfaces:
Ein Interface kann mehrere andere Interfaces erweitern.
Eine Klasse kann mehrere Interfaces implementieren.
In einem Interface gibt es nur abstrakte Methoden und keine Attribute Hier mussen nun einige Regeln gelten, damit alles zusammenpasst
public interface C extends A, B {
}
interface A
interface C
interface B
interface A
interface B
public class C implements A, B {
}
C
M. Goedicke Programmierung WiSe 2020/2021 18
Interfaces: Mehrfachvererbung
In Ermangelung von Attributen und implementierten Methoden kommt es nicht zum Diamantproblem.
Allerdings kann es sein, dass zwei Interfaces Methoden mit gleicher Signatur, aber unterschiedlichem Ruckgabetyp definieren.
Das Erben von beiden Interfaces oder das Implementieren beider Interfaces fuhrt zu einem Kompilierfehler.
Ausnahme: Wenn der eine Ruckgabetyp eine Spezialisierung des anderen Ruckgabetyps ist, dann wird dieser Konflikt dadurch gelost, dass die Implementierung der betroffenen Methode die Spezialisierung als Ruckgabetyp erhalt.
interface A
+test(): String
interface B
+test(): char[]
interface C
Kompilierfehler
M. Goedicke Programmierung WiSe 2020/2021 19
Interfaces: Mehrfachvererbung
interface A
+test1():String +test3():void
interface B
+test1():Object +test2():void
C
erlaubt
Der Ruckgabetyp der Methode test1() ist die Klasse String, die von der Klasse Object erbt.
public class C implements A, B { public test1() { . . . } public void test2() { . . . } public void test3() { . . . }
}
Object
String
String
M. Goedicke Programmierung WiSe 2020/2021 20
Gegenuberstellung Interfaces und Abstrakte Klassen
Abstrakte Klassen:
Erlauben die Implementierung vordefinierter Methoden
Sind Teil der Vererbungshierarchie Anderungen sind somit schwierig,
kritisch und konnen weitgehende Folgen fur die Applikation haben
Neue Typen konnen somit nicht einfach so eingefuhrt werden
Erlauben keine Mehrfachvererbung
Interfaces:
Stehen auerhalb der Vererbungshierarchie jede Klasse kann somit
(nahezu) jedes Interface implementieren
Neue Typen lassen sich einfach einfuhren, es mussen nur Interfaces
implementiert werden
Klassen konnen mit implementierten Interfaces zusatzliche Typen haben,
sog. Mixins Comparable ist so ein Mixin
Quelle: Bloch, J. (2008). Effective Java, Item 18. Addison-Wesley Professional. M. Goedicke Programmierung WiSe 2020/2021 21
Interfaces realisieren ein wichtiges OOD-Prinzip
Ein wichtiges Prinzip: (Program to Interfaces) es wird gefordert, dass die Implementierung einer Klasse von ihrer Schnittstelle getrennt wird.
Dadurch soll verhindert werden, dass bei der Verwendung einer Klasse unzulassige Annahmen uber die austauschbare Implementierung der Klasse gemacht werden.
public Bruch(int z, int n) {
zaehler = z;
nenner = n == 0 ? 1 : n; }
public double convert(Bruch bruch) { int zaehler = bruch.getZaehler(); int nenner = bruch.getNenner();
}
Bruch
-zaehler:int -nenner:int
Converter
-convert(Bruch):double
return ((double) zaehler) / nenner;
M. Goedicke Programmierung WiSe 2020/2021 22
Interfaces realisieren ein wichtiges OOD-Prinzip
Der angegebene Konstruktor public Bruch(int z, int n) verhindert, dass das Attribut nenner mit dem Wert 0 initialisiert werden kann.
Wenn die Implementierung dieses Konstruktors geandert wird, dann kann es in der Methode convert() zu einem Laufzeitfehler
kommen.
interface IBruch
+getZaehler():int +getNenner():int
Converter
-convert(IBruch):double
Bruch
Besser: Da die Klasse Converter nur von einem Interface abhangt, werden keine Annahmen uber die Implementierung gemacht. Insbesondere wird davon ausgegangen, dass die Methode getNenner() auch den Wert 0 zuruckgeben kann.
public double convert(IBruch bruch) { int zaehler = bruch.getZaehler(); int nenner = bruch.getNenner(); if (nenner != 0)
return ((double) zaehler) / nenner; else . . .
}
M. Goedicke Programmierung WiSe 2020/2021 23
Interfaces: Statische Konstanten
Interfaces deklarieren zwar keine Attribute, sie konnen aber statische Konstanten mit dem Sichtbarkeitsmodifikator public definieren.
Wie bei den Methoden konnen die redundanten Schlusselworter public, static und final weggelassen werden.
public interface Buyable {
public static final double MAX_PRICE = 1000.; public abstract double getPrice();
}
public interface Buyable {
double MAX_PRICE = 1000.;
double getPrice(); }
interface Buyable
+MAX_PRICE:double
+getPrice():double
M. Goedicke Programmierung WiSe 2020/2021 24
Interfaces: Statische Konstanten
Wenn ein Interface B das Interface A erweitert oder wenn eine Klasse C das Interface A implementiert, dann werden alle Konstanten aus A an B bzw. an C vererbt.
public interface A {
int UPPER_BOUND = 10;
}
System.out.println(A.UPPER_BOUND); // Ausgabe: 10 System.out.println(B.UPPER_BOUND); // Ausgabe: 10 System.out.println(C.UPPER_BOUND); // Ausgabe: 10
C
interface A
+UPPER_BOUND: int
interface B
M. Goedicke Programmierung WiSe 2020/2021 25
Interfaces: Statische Konstanten
Wenn ein Interface B von mehreren Interfaces A1, . . ., An erbt oder wenn eine Klasse C die Interfaces A1, . . ., An implementiert, dann fuhren gleichnamige Konstanten zu einem Kompilierfehler:
interface A1
+UPPER_BOUND:int
interface A2
+UPPER_BOUND:int
C
Kompilierfehler
Das Diamant-Problem tritt bei Konstanten aber nicht auf.
public interface B extends A { . . . }
public interface C extends A { . . . }
public class D implements B, C { . . . }
erlaubt
interface A
+UPPER_BOUND:int
M. Goedicke Programmierung WiSe 2020/2021 26
Interfaces: Statische Konstanten
Interfaces sollen nur zur Definition von Typen verwendet werden ein Interface soll also etwas uber eine implementierende Klasse aussagen. Jeder andere Verwendung stellt einen Missbrauch des Konzepts dar!
Negativ-Beispiel: Constant Interface
In einen Interface werden fur die Anwendung wichtige Konstanten
gesammelt und stehen so allen implementierenden Klassen zur
Vefugung.
Im JDK findet sich z. B. das Interface ObjectStreamConstants,
welches Konstanten fur die Behandlung von Streams enthalt.
Problem: Konstanten sind ein Implementierungsdetail, jedoch werden
diese als Teil der Klasse veroffentlicht, wenn das Interface implementiert wird
public interface MathConstants {
static final double PI = 3.14159265359; static final double PHI = 1.6180339887; static final double EULERIAN = 2.718281828;
Better in a different way
}
Quelle: Bloch, J. (2008). Effective Java, Item 19. Addison-Wesley Professional. M. Goedicke Programmierung WiSe 2020/2021 27
Interfaces: Statische Konstanten
Besser:
Konstanten nur an Interfaces hangen, die unabdingbar damit verbunden
sein mussen
Wenn moglich Enums verwenden
Alternative: nichtinstanziierbare Utility Classes
public class MathConstants {
private MathConstants() {}
public static final double PI = 3.14159265359; public static final double PHI = 1.6180339887; public static final double EULERIAN = 2.718281828;
}
Privater Konstruktor verhindert Instanziierung
final kann verwendet werden, um Vererbung zu verhindern
Quelle: Bloch, J. (2008). Effective Java, Item 19. Addison-Wesley Professional. M. Goedicke Programmierung WiSe 2020/2021 28
Interfaces: Beispiele
Die JAVA-Klassenbibliothek enthalt einige wichtige Interfaces. Beispielsweise ist das bereits erwahnte Interface Comparable
Bestandteil der Klassenbibliothek. Da es sich im Paket java.lang befindet, kann es ohne import-Anweisung verwendet werden.
interface Comparable
+compareTo(other: Object): int
In manchen Situation kann man das Comparable-Interface nicht verwenden z. B. wenn man nicht der Autor der Klasse ist, deren Instanzen sortiert werden sollen.
In diesen Fallen kann auf das Comparator-Interface zuruckgegriffen werden, das sich im Paket java.util befindet.
interface Comparator
+compare(first: Object, second: Object): int
M. Goedicke Programmierung WiSe 2020/2021 29
Interfaces: Beispiele
Beispielsweise besitzt die Klasse Arrays aus dem Paket java.util die Klassenmethode public static void sort(Object[] a, Comparator c), mit der man ein Array sortieren kann.
Die Ordnung, bzgl. der das Array a sortiert werden soll, wird uber den Parameter c definiert.
public int compare(Object o1, Object o2) {
Student s1 = (Student) o1;
Student s2 = (Student) o2;
int val = s1.getName().compareTo(s2.getName()); if (val == 0) {
val = s1.getFirstName().compareTo(s2.getFirstName()); }
return val; }
Student
-lastName:String -firstName:String
interface Comparator
MyComparator
M. Goedicke Programmierung WiSe 2020/2021 30
Interfaces: Beispiele
Fur zwei Student-Objekte s1 und s2 gilt dabei:
compare(s1, s2) < 0, wenn s1 bzgl. der gewahlten Ordnungsrelationkleiner als s2 ist, compare(s1, s2) == 0, wenn s1 bzgl. der gewahltenOrdnungsrelation gleich s2 ist, compare(s1, s2) > 0, wenn s1 bzgl. der gewahlten Ordnungsrelation
groer als s2 ist.
Student
-lastName:String -firstName:String
Student[] a = . . .;
MyComparator c = new MyComparator(); Arrays.sort(a, c);
Kurzere Variante mit einem anonymen Objekt: Student[] a = . . .;
Arrays.sort(a, new MyComparator());
interface Comparator
MyComparator
M. Goedicke Programmierung WiSe 2020/2021 31
Interfaces: Anonyme Klassen
Eine Klasse, die das Comparator-Interface implementiert, hat
typischerweise zwei Eigenschaften:
Die Klasse besitzt weder eigenen Methoden noch Attribute.
Die erzeugten Instanzen der Klasse sind anonyme Objekte.
Es ist umstandlich, eine eigene Klasse anzulegen, nur um das Comparator-Interface zu implementieren.
In solchen Fallen kann man daher anonyme Klassen verwenden, um Interfaces zu implementieren.
Student[] a = . . .; Arrays.sort(a, new Comparator() {
public int compare(Object o1, Object o2) {
} });
anonyme Klasse
M. Goedicke Programmierung WiSe 2020/2021 32
Interfaces: Anonyme Klassen
Anonyme Klassen konnen auf die Attribute und Methoden der umgebenden Klasse zugreifen.
Wenn beispielsweise eine Namensliste vorliegt, nach der man die Studierenden sortieren mochte, dann kann das folgendermaen realisiert werden:
private List namensliste;
public void sort(Student[] a) { Arrays.sort(a, new Comparator() {
public int compare(Object o1, Object o2) {
Student s1 = (Student) o1;
Student s2 = (Student) o2;
int i1 = namensliste.indexOf(s1.getNachname()); int i2 = namensliste.indexOf(s2.getNachname()); return i1 i2;
} });
}
Zugriff auf Attribut der umgebenden Klasse
M. Goedicke Programmierung WiSe 2020/2021 33
Interfaces: Zusammenfassung
Interfaces definieren Typen sie werden eingesetzt, um einer Klasse mehrere Datentypen zuzuweisen.
Interfaces deklarieren Methoden, die implizit abstract und public
sind.
Eine Klasse B kann mehrere Interfaces A1,,An implementieren.
Jede Instanz der Klasse B hat dann insbesondere den Datentyp Ai mit 1 i n.
public class B implements A1, . . ., An { . . . }
Die Probleme der Mehrfachvererbung treten dabei nicht auf, da Interfaces keine Attribute enthalten und keine Methoden implementieren.
interface A1
interface An
B
M. Goedicke Programmierung WiSe 2020/2021 34
Interfaces: Ubungen
InterfaceComparable
Beispiel Zahl -> zur Demonstration wie Comparable funktioniert Beispiel Punkte, Vergleich bzgl. Entfernung zum Ursprung
Beispiel Bruche
InterfaceIterableundIterator.
Spezielle Form der For-Schleife for (p: Struktur) {} . . .
Zwei Bemerkungen
Eigentlich Comparable
im kommenden Kapitel
Die Sammlung der Klassen-Defintionen und Interfaces in java.util werden
wir auch noch beleuchten
M. Goedicke Programmierung WiSe 2020/2021 35
Interfaces: Ubungen
InterfaceComparable
Beispiel Zahl -> zur Demonstration wie Comparable funktioniert
public class Zahl implements Comparable
public Zahl(int zahl){ this.zahl = zahl;
}
public int getZahl(){ return zahl;
}
public void setZahl(int zahl){
this.zahl = zahl; }
.. .
M. Goedicke Programmierung WiSe 2020/2021 36
Interfaces: Ubungen
InterfaceComparable
Beispiel Zahl -> zur Demonstration wie Comparable funktioniert
/*
* Hier ist die vom Interface geforderte Methode.
* Ein weiteres Objekt des Typs Zahl wird uebergeben.
* Wenn unser aktuelles Objekt kleiner ist als der Parameter, * soll -1, wenn es groesser ist 1 und bei Gleichheit
* 0 zurueckgegeben werden.
*/
public int compareTo(Zahl z) { if (this.zahl < z.getZahl()){return -1;} else if (this.zahl > z.getZahl()){
return 1; } else {
return 0; }
}
M. Goedicke Programmierung WiSe 2020/2021 37
Interfaces: Ubungen
InterfaceIterable
Beispiel Stack . . . Zeigt wie Iterable funktioniert
Interface erfordert, dass ein sogenannter Iterator implementiert wird
Ein Iterator liefert einen Mechanismus fur den Durchlauf einer Struktur Siehe
http://docs.oracle.com/javase/9/docs/api/java/lang/Iterable.html http://docs.oracle.com/javase/9/docs/api/java/util/Iterator.html
Beispiel Integer-Stack
class IntStack implements Iterable
public Iterator
return new IntStackIterator();
class ListIterator implements Iterator
}
M. Goedicke Programmierung WiSe 2020/2021 38
Interfaces: Ubungen
InterfaceIterable
Beispiel Stack . . . Zeigt wie Iterable funktioniert
Interface erfordert, dass ein sogenannter Iterator implementiert wird
Ein Iterator liefert einen Mechanismus fur den Durchlauf einer Struktur Siehe
http://docs.oracle.com/javase/9/docs/api/java/lang/Iterable.html http://docs.oracle.com/javase/9/docs/api/java/util/Iterator.html
Beispiel Integer-Stack
class ListIterator implements Iterator
ListIterator()
{ this.current = first;}
public boolean hasNext() {. . . }
public Integer next() {. . .}
public void remove() { }
}
M. Goedicke Programmierung WiSe 2020/2021 39
Reviews
There are no reviews yet.