What does this mean?
An anonymous class is just what its name imples -- it has no name. It combines the class declaration and the creation of an instance of the class in one step.
Probably most of the classes you have developed so far have been named classes such as Queue or Circle. Each of these classes contained a full definition; you could instantiate objects from any of these classes.
When defining an anonymous class, the definition and object instantiation is done all in one step. The class itself has no name (this is why it's anonymous) and this is the only way an object can be instantiated.
Since anonymous classes have no name, objects can not be instantiated from outside the class in which the anonymous class is defined. In fact, an anonymous object can only be instantiated from within the same scope in which it is defined.
Why use an anonymous class?
Anonymous classes can be time-savers and reduce the number of .java files necessary to define an application. You may have a class that is only used in a specific situation such as a Comparator. This allows an "on the fly" creation of an object.
You may find you prefer to use anonymous classes; many people use them extensively to implement listeners on GUIs.
What are these classes with unusual names?
Just because a class is anonymously defined, it's still a class and a corresponding class file needs to be created.
When you compile a class that contains an anonymous class definition, the compiler will create separate class files named
In other words, if you implement a single anonymous class within the class MyAnonymousTest, the compiler will generate the files MyAnonymousTest.class and MyAnonymousTest$1.class.
If you implement two anonymous classes in the same class, MyAnonymousTest$2.class will also be created.
The Syntax for Anonymous Class Definitions
This example demonstrates an anonymous class definition for a comparator that is passed to the sort() method in the Collections class. Assume that aList is a valid List of data that is to be sorted.