Klassendefinitionen in Java
Eine Klasse kann zusammengehörige Methoden zusammenfassen. Die Namen von Methoden einer Klasse brauchen nur innerhalb der Klassen eindeutig zu sein.
Lieder.java
/** Das Lied "Auf einem Baum ein Kuckuck sass" */
class AufEinemBaumEinKuckuckSass
{ /** Den Refrain des Liedes "Auf einem Baum ein Kuckuck sass" ausgeben. */
private static void refrainAusgeben()
{ System.out.println( "Sim sa la dim, bam ba," );
System.out.println( "Sa la du, sa la dim -" );}
/** Den Text des Liedes "Auf einem Baum ein Kuckuck sass" ausgeben. */
public static void liedAusgeben()
{ { System.out.println( "Auf einem Baum ein Kuckuck, -" );
refrainAusgeben();
System.out.println( "Auf einem Baum ein Kuckuck sass." ); }
{ System.out.println( "Da kam ein junger Jaeger, -" );
refrainAusgeben();
System.out.println( "Da kam ein junger Jaegersmann." ); }
{ System.out.println( "Der schoss den armen Kuckuck, -" );
refrainAusgeben();
System.out.println( "Der schoss den armen Kuckuck tot." ); }}}
/** Das Lied "Ein Vogel wollte Hochzeit machen" */
class EinVogelWollteHochzeitMachen
{ /** Den Refrain des Liedes "Ein Vogel wollte Hochzeit machen" ausgeben. */
private static void refrainAusgeben()
{ System.out.println( "Fi-di-ra-la-la, fi-di-ra-la-la, fi-di-ra-la-la-la-la!" ); }
/** Den Text des Liedes "Ein Vogel wollte Hochzeit machen" ausgeben. */
public static void liedAusgeben()
{ System.out.println( "Ein Vogel wollte Hochzeit machen, in dem gruenen Walde." );
refrainAusgeben();
System.out.println( "Die Drossel war der Braeutigam, die Amsel war die Braute." );
refrainAusgeben();
System.out.println( "Die Lerche, die Lerche, die fuehrt die Braut zur Kerche." );
refrainAusgeben(); }}
/** Testklient fuer Liedklassen */
public class Lieder
{ /** Testklient fuer Liedklassen */
public static void main( String s[] )
{ AufEinemBaumEinKuckuckSass.liedAusgeben();
EinVogelWollteHochzeitMachen.liedAusgeben(); }}System.out
Auf einem Baum ein Kuckuck, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Auf einem Baum ein Kuckuck sass.
Da kam ein junger Jaeger, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Da kam ein junger Jaegersmann.
Der schoss den armen Kuckuck, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Der schoss den armen Kuckuck tot.
Ein Vogel wollte Hochzeit machen, in dem gruenen Walde.
Fi-di-ra-la-la, fi-di-ra-la-la, fi-di-ra-la-la-la-la!
Die Drossel war der Braeutigam, die Amsel war die Braute.
Fi-di-ra-la-la, fi-di-ra-la-la, fi-di-ra-la-la-la-la!
Die Lerche, die Lerche, die fuehrt die Braut zur Kerche.
Fi-di-ra-la-la, fi-di-ra-la-la, fi-di-ra-la-la-la-la!
In der Methode "main" wird zunächst die Methode "AufEinemBaumEinKuckuckSass.liedAusgeben" aufgerufen. Man sagt auch, daß der Klasse "AufEinemBaumEinKuckuckSass" die Nachricht "liedAusgeben()" geschickt werde. Dieselbe Nachricht wird in der nächsten Anweisung an eine andere Klasse geschickt und hat dann auch eine andere Wirkung.
Namen von Klassen sollten Hauptwörter (Nomen) oder kurze Nominalphrasen sein, die mit einem großen Buchstaben anfangen und in denen der Anfangsbuchstabe jedes weiteren Wortes groß geschrieben wird und sonst kleine Buchstaben verwendet werden.
In Java darf nur eine öffentliche Klasse pro Übersetzungseinheit (Quelldatei) definiert werden. Die Klasse mit der Methode "main" muß öffentlich sein, da diese Methode von der Javamaschine, also von außen, aufgerufen werden kann. „Öffentlich“ bedeutet daß solch ein Aufruf einer Methode von einer Entität außerhalb der Übersetzungseinheit möglich ist: Dazu müssen die Klasse und die Methode beide öffentlich sein. Der Name der Datei mit der Übersetzungseinheit muß der Name der öffentlichen Klasse mit der Erweiterung ".java" sein.
Die beiden anderen Klassen sind nicht öffentlich. Das ist auch nicht nötig, weil ihre Methoden nur aus derselben Übersetzungseinheit aufgerufen werden.
In der Übersetzungseinheit stehen Klassendefinitionen mit Methodendefinitionen und kleine Klassen oder Methoden, dennoch nennt man—nicht ganz genau—eine Klassendefinition oder eine Methodendefinition oft einfach nur eine „Klasse“ oder eine „Methode“, wenn keine Mißverständnisse zu befürchten sind.
Auch vor Klassendefinitionen sollte—wie vor Methodendefinitionen—jeweils ein Dokumentationskommentar stehen, der die definierte Entität beschreibt. Im Falle der hier vorgestellten Übersetzungseinheit wird unter normalen Umständen aber nur die öffentliche Methode "main" der öffentlichen Klasse "Lieder" in die erzeugte Dokumentation aufgenommen, weil nur sie öffentlich ist und damit zur von außen verwendbaren Schnittstelle der Übersetzungseinheit gehört.
- Übungsaufgabe Liedklassen erweitern
- Erweitern Sie die Klasse "AufEinemBaumEinKuckuckSass" und die Klasse "EinVogelWollteHochzeitMachen" um jeweils eine Methode "nameAusgeben", die den Namen des jeweiligen Liedes ausgibt. Rufen Sie diese Methoden in sinnvoller Weise in der Hauptmethode "main" auf.
- Übungsaufgabe Grußklassen definieren
- Schreiben Sie eine Übersetzungseinheit mit einer Klasse "Englisch" und einer Klasse "Deutsch", die jeweils eine Methode "printHallo" enthalten. Die Methode "printHallo" der Klasse "Englisch" soll eine Begrüßung auf Englisch (z.B., den Text "Hello!") ausgeben, die Methode "printHallo" der Klasse "Deutsch" soll eine Begrüßung auf Deutsch (z.B., den Text "Hallo!") ausgeben. Schreiben Sie eine Hauptmethode in einer weiteren öffentlichen Klasse dazu, die den beiden zuvor definierten Klassen jeweils die Nachricht "printHallo" schickt und so einen Gruß auf Deutsch und einen Gruß auf Englisch ausgibt.