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