Helmichs Informatik-Lexikon

Klasse

Aufbau

Eine Java-Klasse besteht immer aus dem Kopf sowie drei Abschnitten Kopfteil, Attribute und Methoden. Graphisch kann man eine Klasse mit einem UML-Klassendiagramm veranschaulichen.

Kopfteil

Betrachten wir ein einfaches Beispiel, den Kopfteil einer normalen Java-Klasse:

public class Waage

Zunächst kommt der Zugriffsmodifizierer public, dann das Schlüsselwort class, gefolgt vom Namen der Klasse.

Ein Klassenkopf kann noch komplexer aufgebaut sein, vor allem im Zusammenhang mit Vererbung, aber das würde hier jetzt zu weit führen.

Attribute

Gleich nach dem Kopfteil kommen die Attribute, wobei man noch zwischen primitiven Attributen wie

public class Waage
{
   int x,y;
   double umfang;
   String errorMsg;

und Objekt-Attributen wie

public class Waage
{
   Zeiger z;
   Trittbrett t;

unterscheiden muss. Die Attribute z und t sind hier Objekte anderer Klassen. Selbstverständlich kann man auch Arrays solcher Attribute in einer Klasse anlegen:

public class Waage
{
   int[] zahl;
   int position;

Das Attribut zahl ist ein solcher Array, während position wieder ein primitives Attribut ist.

Konstruktor(en)

Die Konstruktoren sind spezielle Methoden, die immer dann aufgerufen werden, wenn Attribute mit Werten initialisiert oder neue Objekte der Klasse angelegt werden. Hier ein Beispiel:

public class Auto
{
   int gewchwindigkeit, kilometerstand;
   double benzinstand;
   Motor m;
 
   public Auto(int km, int benz)
   {
      kilometerstand = km;
      benzinstand = benz;
      motor = new Motor();
   }

Der Konstruktor heißt stets genau so wie die Klasse, und er besteht aus dem Wort "public", dem Namen der Klasse und der Parameterliste.

Der Konstruktor der Klasse Auto initialisiert drei Attribute, nämlich kilometerstand, benzinstand und motor. Die beiden ersten Attribute sind primitive Datentypen, das dritte Attribut ist ein Objekt der Klasse Motor. Die beiden Parameter des Konstruktors setzen die beiden primitiven Attribute auf die übergebenen Werte. Wird beispielsweise in einer anderen Klasse geschrieben

   meinAuto = new Auto(400,20);

so wird ein neues Auto-Objekt meinAuto erzeugt, das bereits 400 km gefahren ist und einen Benzinstand von nur 20 Litern hat. Diese Werte werden dem Konstruktor der Klasse Auto beim Erzeugen des neuen Auto-Objektes als Parameter übergeben, und der Konstruktor kann daraufhin die entsprechenden Attribute auf die übergebenen Werte 400 bzw. 20 setzen.

Im Konstruktor der Klasse Auto wird ein neues Objekt motor der Klasse Motor erzeugt. Auch hierzu muss ein Konstruktor aufgerufen werden, nämlich der Konstruktor der Klasse Motor. Wie man auf den ersten Blick sieht, erwartet dieser Konstruktor keine Parameter; die Klammern müssen trotzdem gesetzt werden, wenn der Konstruktor aufgerufen wird.

Methoden

Auf den Konstruktor (oder die Konstruktoren) folgen in der Regel die Methoden der Klasse. Dabei unterscheidet man einmal sondierende und manipulierende Methoden, zum andern private und öffentliche Methoden.

Sondierende Methoden sind Methoden, welche die Werte von Attributen auslesen, eventuell Ergebnisse daraus ableiten, und diese Werte bzw. Ergebnisse beim Beenden der Methode mit Hilfe des return-Befehls an die aufrufende Methode zurückgeben (Einzelheiten siehe: sondierende Methoden).

Manipulierende Methoden sind Methoden, welche die Werte von Attributen verändern. Oft werden dazu Parameter eingesetzt, damit die Methode überhaupt weiß, auf welche Werte sie die Attribute setzen soll (Einzelheiten siehe: manipulierende Methoden).

Öffentliche Methoden sind Methoden, die durch den Zugriffsmodifizierer public gekennzeichnet sind. Auf öffentliche Methoden kann von außerhalb der Objekte zugegriffen werden. Hätte die Klasse Motor beispielsweise eine public-Methode starten, so könnte man in einer Methode der Klasse Auto schreiben:

public void anstellen()
{
   motor.starten();
}

Wäre starten dagegen mit dem Zugriffsmodifizierer private versehen gewesen, so würde ein solcher Aufruf zu einer Fehlermeldung des Compilers führen, dem Sinne nach: "unbekannte Methode".

Private Methoden sind normale Methoden mit oder ohne Parametern, vor denen das Wort "private" steht. Solche privaten Methoden können von allen Methoden der eigenen Klasse bzw. von den Methoden desselben Objektes aufgerufen werden, egal, ob es sich um sondierende oder manipulierende private Methoden handelt. Von außerhalb der Klasse bzw. der Objekte sind private Methoden jedoch nicht aufrufbar; der Compiler würde dann eine entsprechende Fehlermeldung "unbekannte Methode" ausgeben.

Private Methoden werden zum Beispiel dann eingesetzt, wenn bestimmte Algorithmen, die in den öffentlichen Methoden immer wieder vorkommen, an einer Stelle im Quelltexte der Klasse konzentriert werden sollen. Dadurch wird der Quelltext nicht nur deutlich kürzer, sondern auch leichter wartbar. Falls der Algorithmus mal verbessert werden soll, muss nur an einer Stelle des Quelltextes eingegriffen werden. Käme der Algorithmus in drei oder vier verschiedenen Methoden des Quelltextes vor, so müsste man alle drei oder vier Stellen entsprechend verändern. Aus Versehen vergisst man dann eine dieser Stellen, und schon hat man einen groben Fehler in der Klasse platziert, den man dann gar nicht mehr so leicht findet.