Inhalt Interfaces ·Pakete ·innere Klassen
Inhalt Während im ersten OO-Abschnitt Merkmale von Java behandelt wurden, die in ähnlicher Form in vielen anderen objektorientierten Sprachen auch zu finden sind, geht es hier um mehr Java-spezifische Dinge. Nachlesen kann man es in Kapitel 3 aus [Fla99b]. Über Interfaces und Pakete findet sich auch in [LL97] etwas.
Dies & Das |
Dies & Das (2): Typumwandlungen |
.... Konto k = new Konto("Tick", 500); Konto k2 = new Konto("Trick", 1000); Sparkonto sk = new Sparkonto(10, "Track"); k = sk; // Impl. Umwandlung des sk ((Sparkonto)k).verzinsen(); // Cast ((Sparkonto)k2).verzinsen(); // Cast
Interfaces |
<class1> implements <interf1>, <interf2> extends <class2>
Pakete |
|
|
|
Innere Klassen |
Geschachtelte Top-level Klassen/Interface |
Member Klassen |
import java.util.*; public class LinkedList4 { public interface Linkable removeHead() { // top-level nested public Linkable getNext(); public void setNext(Linkable node) }; Linkable head; public void addToHead(Linkable node) {....}; public Linkable removeHead() {....}; public Enumaration enumerate() {return new Enumerator()}; private class Enumerator implements Enumeration { // Member! Linkable current; public Enumerator() {current = head;} // Konstruktor // ------------------ // 2 Methoden des Enumeration-interfaces public boolean hasMoreElements() { return (current != null);} public Object nextElement (){ if (current == null) throw NoSuchElementException("LinkedList"); Object value = current; return value; } } }
Lokale Klassen |
import java.util.*; public class LinkedList4 { public interface Linkable removeHead() { // top-level nested public Linkable getNext(); public void setNext(Linkable node)}; Linkable head; public void addToHead(Linkable node) {....}; public Linkable removeHead() {....}; public Enumaration enumerate() { class Enumerator implements Enumeration { Linkable current; public Enumerator() {this.current = LinkedList.this.head;} // ------------------ // 2 Methoden des Enumeration-interfaces public boolean hasMoreElements() { return (current != null);} public Object nextElement (){ if (current == null) throw NoSuchElementException("LinkedList"); Object value = current; current = current.getNext(); return value; } } } }
Anonyme Klassen |
import java.io.*; public class Lister{ public static void main(String[] args) { File f = new File(args[0]); String[] list = f.list(new FilenameFilter() { public boolean accept(File f, String s) { return s.endsWith(".java"); };} // Ende der anon. Klasse ); for (int i = 0; i < list.length; i++) System.out.println(list[i]); }; };
Klassenarten: Überblick |
Klasse Beschreibung top-level
Paketmitglied K/I Java-1.0, direkt interepretierbar durch die VM
geschachtelt K/I static innerhalb einer anderen top-level Klasse Innere Klasse
Member-Klasse K nicht-statisches Mitglied, besitzt umschließende Instanz, mit Zugriff auf deren Mitglieder, neue Syntax für new, super, this. Statische Mitglieder verboten
Lokale Klasse K innerhalb eines Blocks, Zugriff auf Mitglieder der umschließenden Klasse + final lokale Variable, neue new-Syntax
Anonyme Klasse K namenlose lokale Klasse, eine Instanz, kein Konstruktor
Table 3: Arten von Klassen