Wozu werden die anonyme Klassen verwendet?

Hallo Leute,
eine Frage: wozu werden eigentlich die anonyme Klassen verwendet? Warum macht man sowas?

Bsp:

Java:
interface SpielStein{
int wert();
}

Class Spieler14{

Spielstein liefereStein(){
return new SpielStein(){   //hier beginnt die anonyme Klasse?
private int wert=99;

public int wert(){
return wert;
}
};
}
}
 
Weil man zu faul ist ;-)

In diesem Fall nutzt man die anonyme Klasse um eine Instanz direkt von einem Interfaces zu erzeugen, was ja normalerweise nicht geht.


also es entsteht Fehler:


Java:
package anonymeklasse;

public interface SpielStein {
int wert();
}

class Spieler14 {
Spielstein liefereStein(){    //Hier entsteht eine Fehler, SpielStein kann nicht gefunden werden?
    
return new SpielStein(){
private int wert=99;
public int wert(){
return wert;
}
};
}
}
 

Michael...

Top Contributor
In dem Code macht man es da wo es im Kommentar steht.

Bsp: folgendes Interface:
Java:
interface DemoInterface {
	public int getSomething();
}

Java:
DemoInterface i = new DemoInterface();
Geht nicht, da man von einen Interface (ist ja nur eine Defintion) kein Objekt erstellen kann.
Java:
DemoInterface i = new DemoInterface() {
	public int getSomething() {
		return 1;
	}
};
Geht, da hier durch "überschreiben" von getSomething() das Interface in einer anonymen Klasse implementiert wird.
 
In dem Code macht man es da wo es im Kommentar steht.

Bsp: folgendes Interface:
Java:
interface DemoInterface {
	public int getSomething();
}

Java:
DemoInterface i = new DemoInterface();
Geht nicht, da man von einen Interface (ist ja nur eine Defintion) kein Objekt erstellen kann.
Java:
DemoInterface i = new DemoInterface() {
	public int getSomething() {
		return 1;
	}
};
Geht, da hier durch "überschreiben" von getSomething() das Interface in einer anonymen Klasse implementiert wird.

ach stimmt :D vielen vielen Dank jetzt hab ich es verstanden!
 
Java:
interface DemoInterface {
    public int getSomething();
}

DemoInterface i = new DemoInterface() {
public int getSomething() {
return 1;
}
};

ehm eine Frage noch dazu: Wie schreibt man das ganze? Wenn man es z.B. programmiert?
 

Michael...

Top Contributor
ehm eine Frage noch dazu: Wie schreibt man das ganze? Wenn man es z.B. programmiert?
Verstehe leider nicht was Du meinst. Geht's um ein kompilierbares Bsp?
Java:
public class Demo {
	public static void main(String[]  args){
		DemoInterface i = new DemoInterface() {
			public int getSomething() {
				return 1;
			}
		};
		System.out.println(i.getSomething());
	}
}

interface DemoInterface {
	public int getSomething();
}
 

Semox

Bekanntes Mitglied
Hallo JavaAnfaenger

Es gibt einige Gründe, warum man anonyme Klassen anlegt. Die Erklärung mit der Faulheit greift etwas zu kurz. Kann aber durchaus ein Grund sein.

Interessante Gründe sind aber auch:

  • Erreichbarkeit durch andere Klassen ist nicht möglich, kann ein Sicherheitsaspekt sein.
  • Listener-Implementierung ist ein weiterer Grund
  • Weil mit dem Aufruf einer Anonymen Klasse immer die Erzeugung eines Objekts verbunden ist, existieren die Informationen aus dieser inneren anonymen Klasse nur solange, bis das Objekt nicht weiter verwendet wir und der Garbage Collector kommt. Kann ein Vorteil bei einmalig verwendeten Aktionen sein, wonach Listener nie wieder im weiteren Programmverlauf benötigt werden.
  • Das erzeugte Objekt ist das einzige seiner Art und kann nicht beliebig oft dupliziert werden. Es existiert genau einmal mit dem Aufruf und endet mit Abschluß seiner Funktion/Verwendung.

Hier ein Zitat von folgender Site:

Anonyme Klassen finden einen sinnvollen Einsatz im Zusammenhang mit der Auswertung von Ereignissen im Fenstersystem. Solche "Events" soll automatisch eine vorher angegebene Funktion beantworten. Da es keine Pointer auf Funktionen in JAVA gibt, benutzt man dort anonyme Klassen als Ersatz.​

Trotzdem sorgt eine Innere anonyme Klasse für schlechtere Wartbarkeit des Programms, wenn man diese mit Funktionen überfrachtet. Für diesen Zweck könnte man sich auch eine einfache abstrakte Klasse bereitstellen und einbinden.

Hoffe das hilft Dir etwas weiter.

Gruß,
Semo
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Wozu dient Interfaces? Java Basics - Anfänger-Themen 6
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
N Wozu nutzt man in der Main Methode das args Array? Java Basics - Anfänger-Themen 10
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
W Stackabarbeitung - Wozu dient das "True" ? Java Basics - Anfänger-Themen 1
R Wozu sind Annotations da? Java Basics - Anfänger-Themen 3
H abstract - Wozu? Java Basics - Anfänger-Themen 6
T Erste Schritte Endlosschleife & wozu braucht man /* und */ Java Basics - Anfänger-Themen 19
V OOP Wozu Objekt erstellen? Java Basics - Anfänger-Themen 2
G Wozu ist die Methode offsetByCodePoints(int, int) beim StringBuilder sinnvoll? Java Basics - Anfänger-Themen 1
G wozu dient getContentPane()? Java Basics - Anfänger-Themen 1
M Wozu Upcasting? Am Beispiel List = ArrayList Java Basics - Anfänger-Themen 2
P Wozu brauche ich (this.)? Java Basics - Anfänger-Themen 3
F Wozu braucht man array list? Java Basics - Anfänger-Themen 29
U Wozu dient ein Vector in Java? Java Basics - Anfänger-Themen 6
B Wozu Observer? Java Basics - Anfänger-Themen 9
D Sinn von Interfaces - Wozu? Java Basics - Anfänger-Themen 9
J Datentypen Array in enum, ?? Wozu ?? Java Basics - Anfänger-Themen 3
F Wozu ist Java gut? Java Basics - Anfänger-Themen 7
H Maps? Wozu? Nutzen? Java Basics - Anfänger-Themen 3
0 Wozu braucht man Generics? Java Basics - Anfänger-Themen 1
V wozu ist das 'L' beim long notwendig ? Java Basics - Anfänger-Themen 5
A wozu ant? Java Basics - Anfänger-Themen 12
S Wozu dient die Main Class? Java Basics - Anfänger-Themen 3
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
S Desginfrage Interface - aber wozu eigentlich? Java Basics - Anfänger-Themen 2
E Wozu dienen Schnittstellen? Java Basics - Anfänger-Themen 16
N Wozu Applications? Java Basics - Anfänger-Themen 8
M Methode bekommt ein Objekt der Klasse als Parameter. Wozu? Java Basics - Anfänger-Themen 4
R Wozu sind Interfaces gut? Java Basics - Anfänger-Themen 14
B Hashcode?Was ist das und wozu? Java Basics - Anfänger-Themen 2
R Wozu Interfaces ? Java Basics - Anfänger-Themen 5
G Konstruktoren (was, wozu, wieso, warum) Java Basics - Anfänger-Themen 4
richis-fragen Kann Arrays.stream() auch auf Objekte angewant werden? Java Basics - Anfänger-Themen 10
richis-fragen JTable bei aktivieren einer Zelle soll Text selektiert werden. Java Basics - Anfänger-Themen 24
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
I Zapier -> wie werden Objekte gespeichert? Java Basics - Anfänger-Themen 10
L Datum - Monat und Jahr werden falsch angezeigt Java Basics - Anfänger-Themen 4
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
O HashTable kann ohne Performance-Verlust in Multithreaded-Anwendungen eingesetzt werden. Java Basics - Anfänger-Themen 6
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
R Audio kann nur zum Teil gestoppt werden Java Basics - Anfänger-Themen 1
berserkerdq2 sqllite in Java, wenn ich mache select count(*) ..., erhalte ich dann nur die gezählte Anzahl oder werden auch die Tabellen ausgegeben? Java Basics - Anfänger-Themen 2
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
docmas 2DArray Werte werden nur untereinander ausgegeben Java Basics - Anfänger-Themen 1
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
U Hauptklasse kann nicht gefunden werden Java Basics - Anfänger-Themen 8
OZAN86 For Schleife von 1-50 die Zahlen werden durch ein Komma getrennt Java Basics - Anfänger-Themen 10
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
C java.sql Statement kann nicht geschlossen werden Java Basics - Anfänger-Themen 9
LetsSebi Dateien werden nicht in Zip gespeichert Java Basics - Anfänger-Themen 1
D Codeblöcke, die immer wieder im Programmverlauf benötigt werden Java Basics - Anfänger-Themen 5
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
C Array-Werte werden gemischt, ohne Logik Java Basics - Anfänger-Themen 2
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
Zrebna Programm kann aus der Konsole nicht gestartet werden (in der IDE läuft es) Java Basics - Anfänger-Themen 2
D Zahlen werden falsch gekürzt :? Java Basics - Anfänger-Themen 27
T Javafx ListView kann nicht gefüllt werden. Java Basics - Anfänger-Themen 6
H Eclipse kann nicht gestartet werden .... Java Basics - Anfänger-Themen 15
R Warum werden hier nur die grün und orangen Linien ausgegeben und der Rest unten nicht? Java Basics - Anfänger-Themen 5
J Eckige Klammern werden nicht erkannt Java Basics - Anfänger-Themen 1
J Klammern werden fälschlicherweise eingelesen Java Basics - Anfänger-Themen 2
Elyt Bei Monopoly werden Felder übersprungen Java Basics - Anfänger-Themen 2
Kirby.exe Hauptklasse konnte nicht gefunden werden.... Java Basics - Anfänger-Themen 27
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
L Muss eine HttpURLConnection geschlossen werden? Java Basics - Anfänger-Themen 2
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
D java main methode kann nicht kompiliert werden (Erstellen eines Objekts) Java Basics - Anfänger-Themen 6
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
V Array, Symbol kann nicht gefunden werden Java Basics - Anfänger-Themen 2
S TableView Items werden nicht angezeigt (+Verständnisfragen) Java Basics - Anfänger-Themen 15
O Apache: Log-Settings werden nicht gezogen Java Basics - Anfänger-Themen 0
H LayoutRes, Nullable und SystemServices werden in LayoutInflater nicht importiert Java Basics - Anfänger-Themen 9
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
L Input/Output AudioInputStream kann nicht erstellt werden. Java Basics - Anfänger-Themen 3
E Die Hauptklasse konnte nicht gefunden werden. Java Basics - Anfänger-Themen 12
H Hauptklasse ... konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 8
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
S Hauptklasse konnte nicht gefunden werden Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben