Info B VL 11: Innere Klassen/Collections
Objektorientiere Programmierung in Java 2003
Ute Schmid (Vorlesung) Elmar Ludwig ( ¨ Ubung)
FB Mathematik/Informatik, Universit¨at Osnabr¨uck
Wiederholung: Innere Klassen
Vier Arten von inneren Klassen:
Member Classes (“echte” innere Klasse)
Static Member Classes (Nested Top-Level Classes) Local Classes
Anonymous Classes
Lokale Klassen / Nachtrag
public class Test {
public static interface Value { public int getValue ();
public void setValue (int i);
}
public Value[] foo () { int value = 0;
class Local implements Value {
public int getValue () { return value; } public void setValue (int i) { value = i; } };
return new Value[] { new Local(), new Local() };
}
public static void main (String args[]) { Test test = new Test();
Value[] v = test.foo(); // two value objects v[0].setValue(42); v[1].setValue(24);
System.out.println(v[0].getValue()); // ???
} }
Anonyme Klassen
Namenlose lokale Klassen
Kombination der Syntax von Klassen-Definition und Objekt-Erzeugung
wie lokale Klassen innerhalb eines Ausdrucks definiert
‘Enumerator’ als anonyme Klasse
public java.util.Enumeration enumerate() {
// The anonymous class is defined as part of the // return statement
return new java.util.Enumeration() { protected int current = 0;
public boolean hasMoreElements() { return current < numOfEls;
}
public Object nextElement() { if (! hasMoreElements())
throw new java.util.NoSuchElementException();
return list[current++];
}
}; // semicolon required to finish return statement
}
Eigenschaften von Anonymen Kl. (1)
Lokale Klasse ohne Namen.
Definition und Instantiierung in einem einzigen Ausdruck ( new Operator).
Zwei Formen:
new class-name
( [ argument-list
] )
class-body
Konstruktoraufruf der Oberklasse (evtl. auch
Default-Konstruktor), Erzeugung eines Objekts der anonymen Unterklasse.
new interface-name
( )
class-body