hallo
mitlerweile habe ich es im lehrbuch drei mal nachgelesen und immer noch nicht verstanden:
was unterscheidet eigentlich eine anonyme klasse von einer „normalen“ klasse und wo für benötige ich anonyme klassen?
danke im vorraus für die hilfe
linda
Hallo Linda,
Anonyme Klassen haben keinen Namen und werden in einer Funktion deklariert und auch gleich erzeugt.
Die wird vor allem im GUI-Bereich für Eventlistener gebraucht.
Unten findest Du ein Beispiel.
Wie Du siehst hat der KeyAdapter keinen Namen. Er wird direkt mit new erzeugt und auch die Funktion wird gleich deklariert.
Würde man das nicht so machen. Müsste dies entweder als InnerClass oder als eigene Klass geschehen, was viel mehr (vor allem unnötigen) Code bedeuten würde.
Viele Grüsse
Simon
z.B.
addKeyListener(
new KeyAdapter() {
public void keyPressed(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.VK\_ESCAPE) {
setVisible(false);
dispose();
System.exit(0);
}
}
}
);
Hallo,
Simon hat das wesentliche schon gesagt. Allgemeiner werden diese Klassen dazu verwendet Interfaces oder abstrakte Klassen zu implementieren oder vorhandene (nicht-abstrakte) Klassen zu verfeinern. Äußerst schönes Sprachfeature, was man allerdings ziemlich an Übersichtlichkeit einbüßt, wenn die Definition der Anonymous-Class sich über mehrere Seiten erstreckt.
Gruss
Enno
Hallo Linda,
die häufigste Verwendung für anonyme Klassen wurde ja bereits erwähnt, jetzt zu deinen eigentlichen Fragen:
was unterscheidet eigentlich eine anonyme klasse von einer „normalen“ klasse
Anonyme Klassen sind lokale innere Klassen, die keinen Namen haben und genau einmal instanziiert werden.
Als innere Klassen bezeichnet man alle Klassen, die innerhalb eines anderen class-Blocks definiert werden. Man unterscheidet einige Unterarten, je nachdem, in welcher Beziehung die innere zur umgebenden Klasse steht.
Wie für „normale“ Klassen wird auch für jede innere Klasse beim Compilieren eine eigene class-Datei erzeugt.
Lokale Klassen stellen eine Unterart innerer Klassen dar. Man kann lokale Klassen innerhalb beliebiger Codeblöcke definieren, also auch innerhalb eines Methodenrumpfes. Eine lokale Klasse kann nur innerhalb des Codeblocks verwendet werden, in dem sie definiert wurde. Sie kann auf alle Variablen und Methoden der umgebenden Klasse zugreifen (auch solche, die als „private“ deklariert sind).
Anonyme Klassen können auch innerhalb beliebiger Codeblöcke definiert werden. Anders als normale lokale Klassen haben sie keinen Namen, können also nur ein einziges Mal instanziiert werden - an Ort und Stelle ihrer Definition. Man kann für anonyme Klassen auch keine Konstruktoren definieren.
Die beim Compilieren erzeugten zugehörigen class-Dateien werden mangels Namen einfach durchnumeriert.
und wo für benötige ich anonyme klassen?
Anonyme Klassen können nichts, was normale lokale Klassen nicht auch könnten, insofern benötigt man sie nicht unbedingt. Ihr Einsatz bietet sich aber an, wenn man eine Klasse nur einmal an einer Stelle im Code benötigt - man muss sich nicht extra einen Namen dafür ausdenken und die Schreibweise ist sehr kompakt.
Hoffe zur Aufklärung beigetragen zu haben…
Weihnachtliche Grüße!
Tom