Programming Languages (CS302 2006S)
[Skip to Body]
Primary:
[Front Door]
[Current]
[Glance]
-
[Honesty]
[Instructions]
[Links]
Groupings:
[EBoards]
[Examples]
[Exams]
[Handouts]
[Homework]
[Labs]
[Outlines]
[Readings]
[Reference]
Misc:
[SamR]
[CSC302 1999S]
Comments on:
The questions:
Comments from: Peter Brown (*), Michael Claveria, Davis Hart, Alex Leach, Angeline Namai.
No Comments from: Brad Miller (x), Mark Nettling (x), Dimitar Tasev (x), Dave Ventresca (x).
Anonymous inner classes override methods of a superclass and access the internal properties and methods of its outer class. They are very useful for controlled access to the components of a class, and are also useful when only one instance of a special class is desired.
[Source:
Inner classes in general allow the programmer to better encapsulate object data or logic by separating that logic into a subclass. Instead of being limited to a structure like:
Package Class 1 Class 2 ...
Inner classes allow structures like:
Package Class 1 Class 2 Class A Class B
Anonymous inner classes offer the same advantages and in addition are useful for callbacks. Instead of using switch blocks or nested if/else blocks, a programmer can provide anonymous inner classes to methods which utilize callback classes. Inner classes have access to the parent's fields, which must be declared as final. Furthermore, inner classes can override the parent's methods.
http://www.javaworld.com/javaworld/javaqa/2000-03/02-qa-innerclass.html
http://mindprod.com/jgloss/anonymousclasses.html
http://www.exciton.cs.rice.edu/JavaResources/Java/innerclasses.htm
An anonymous inner class is declared and instantiated in one step, so it saves time, and reduces the number of temporary variables the programmer has to keep track of. Anonymous inner classes also work well in event-handling and in co-routining, because they can act as callbacks. I think that, in this sense, they are analogous to the higher-order procedures of functional languages. Another advantage is that they reduce the number of parent classes (i.e. .java files) that make up one program. Debugging is easier when there are fewer .java files to deal with than when one has to cross-reference a large number of .java files. Also, AIC's allow for better design. Rather than having a separate parent class that contains only one method in it, we could define this method as a member of an anonymous inner class.
One disadvantage I can think of is the confusing syntax, which could make maintenance very difficult. The Java tutorial also says that anonymous inner classes have inner scope. The programmer is therefore forced to declare variables to be final in order to make them accessible to the AIC. I would say that this is somewhat a disadvantage since it adds more complexity to the language.
Question: AIC's increase the number of .class files associated with one .java file. Could this cause any problems?
Inner classes are class files whose name is scoped inside the private scoping of an outer class. Essentially the inner classes are defined and hidden inside another class so that even the other classes in the same package can't see them. An anonymous inner class is an inner class that are not named. Anonymous inner classes can override methods of the superclass. They must use the no parameter constructor of the superclass and have a problem of accessing local variables. An anonymous class is generally used inside an expression and it does not have member scope, since it isn't visible to the enclosing class.
Anonymous inner classes are very useful for controlled access to the innards of another class. They also can be used when you only want one instance of a special class. They are easy to use and quick to type in, plus they hide code that is not being used for anything important in a class. Using anonymous classes to make small changes to class functionality instead of creating a plethora of trivial subclasses actually makes class libraries less cluttered and much easier to understand.
http://www.javaworld.com/javaworld/jw-10-1997/jw-10-indepth.html
http://www.javaworld.com/javaworld/javaqa/2000-03/02-qa-innerclass.html
http://www.exciton.cs.rice.edu/JavaResources/Java/innerclasses.htm
http://www.javaworld.com/javaworld/jw-07-1998/jw-07-pollresults2.html
To understand Anonymous Inner Classes, I first had to get a
definition for Inner classes in general.
Inner Classes are defined simply as a class that is entirely defined
within another class.
Anonymous inner classes (AICs) are defined simply as unnamed inner
classes.
Sun states that An anonymous class is generally used inside an
expression and it does not have member scope, since it isn't visible
to the enclosing class. Anonymous classes can make code difficult to
read. You should limit their use to those classes that are very small
(no more than a method or two) and whose use is well understood, such
as event-handling classes.
http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html
.
I take this quote as meaning that AICs are basically syntactic sugar,
which experienced programmers can use to make an inner class and an
instance of that inner class at the same time.
This allows the programmer to not have to pass arguments to a
constructor (in fact,
http://www.exciton.cs.rice.edu/JavaResources/Java/innerclasses.htm
states that one MUST use the no parameter
constructor), instead having the inner class simply take what it
needs from the larger method enclosing it.
AICs are generally only used when only one instance of the class is
needed.
[Skip to Body]
Primary:
[Front Door]
[Current]
[Glance]
-
[Honesty]
[Instructions]
[Links]
Groupings:
[EBoards]
[Examples]
[Exams]
[Handouts]
[Homework]
[Labs]
[Outlines]
[Readings]
[Reference]
Misc:
[SamR]
[CSC302 1999S]
Disclaimer:
I usually create these pages on the fly
, which means that I rarely
proofread them and they may contain bad grammar and incorrect details.
It also means that I tend to update them regularly (see the history for
more details). Feel free to contact me with any suggestions for changes.
This document was generated by
Siteweaver on Wed May 10 09:03:10 2006.
The source to the document was last modified on Wed Mar 8 08:38:42 2006.
This document may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS302/2006S/Readings/anonymous-inner-classes.html
.
You may wish to validate this document's HTML ; ; Check with Bobby
Samuel A. Rebelsky, rebelsky@grinnell.edu