Previous Contents Next

5   Objektorientierte Strukturen (2)

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


Hier einige Dinge, die ich nicht erzählt habe und die wir (bis auf die Casts) vermutlich nicht brauchen, beziehungsweise die später kommen.

Dies & Das (2): Typumwandlungen


Beispiel 15  [Casts]  

....
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


Pakete


Innere Klassen


Geschachtelte Top-level Klassen/Interface


Member Klassen


Beispiel 16  [Member]   Folgendes Beispiel zeigt das Absuchen einer Liste unter Verwendung java.util.Enumeration. Wollten wir den Enumerator nicht als Member, sondern als getrennte top-level Klasse definieren, müssten wir ihm die LinkedList als Argument des Konstruktors mitgeben. Hier kann mit head direkt auf das Feld der umgebenden Klasse zugegriffen werden.

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


Beispiel 17  [Lokale Klasse]  

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
Beispiel 18  [Anonyme Klasse]   Im folgendes Beispiel implementiert eine anonyme Klasse das Interface FilenameFilter (mit Methode accept) aus dem Paket java.io.36

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



8. Mai 2000


July 4, 2000
Previous Contents Next