6.15 Pakete
 
Ein Paket ist eine Gruppe von thematisch zusammengehörigen Klassen, die sich normalerweise1
in einem Verzeichnis befinden. Den Verzeichnisnamen gibt ein Paketname an:
package süßigkeiten;
class Zucker
{
...
}
public class Schokolade extends Zucker
{
...
}
Alle Klassen, die in dieser Datei implementiert werden, gehören zum Paket süßigkeiten. Die Zugehörigkeit wird durch das Schlüsselwort package ausgedrückt.
Um die Pakete zu nutzen, wird innerhalb einer Klasse mit import auf die Klassen im Paket aufmerksam gemacht. Importiert ein Paket ein anderes, so können die Klassen schnell referenziert werden:
package leckereien;
import süßigkeiten.Schokolade;
class Weihnachtsmann
{
Schokolade s; // sonst süßigkeiten.Schokolade
}
Damit nicht alle Klassen eines Pakets einzeln aufgeführt werden müssen, lässt sich mit dem Sternchen als einer Art Wildcard auf alle public-Klassen zugreifen. Häufig Gebrauch machen davon Programme mit grafischer Oberfläche; in den ersten Zeilen findet sich dann:
import java.awt.*; // 2
Natürlich müssen wir diesen import nicht schreiben. Er dient lediglich als Abkürzung für die Klassenbezeichnung. Ein Problem gibt es bei mehreren gleich benannten Klassen in verschiedenen Paketen, hier ist eine volle Qualifizierung nötig. Ab dem SDK 1.2 gibt es im Paket java.awt und java.util eine Liste. Ein einfaches import java.awt.* und java.util.* hilft da nicht, denn der Compiler weiß nicht, ob die GUI-Komponente oder die Datenstruktur gemeint ist. Auch sagt ein import nichts darüber aus, ob die Klassen in der importierenden Datei jemals gebraucht werden.
Pakete sind oft in Hierarchien geordnet. Dies wird auch durch die Abbildung auf die Verzeichnisstruktur des Dateisystems deutlich. Daher gehören zu einem Paket oft verschiedene Unterpakete. Es werden durch import java.* nicht automatisch alle Klassen der Unterpakete mit eingebunden. Die import-Anweisung bezieht sich nur auf ein Verzeichnis und schließt die Unterverzeichnisse nicht mit ein.
1
Ich schreibe »normalerweise«, da die Paketstruktur nicht zwingend auf Verzeichnisse abgebildet werden muss. Pakete könnten beispielsweise vom Klassenlader aus einer Datenbank gelesen werden.
2
In den ersten Java-Versionen ließ sich auch etwa import java.awt; anstatt import java.awt.*; schreiben.
|