Classic Java logo

A few weeks ago I discussed the different ways to include multiple classes in one file, and one of the comments questioned my use of a class within a class. Apparently when they tried to do it in earlier versions of Java all they got in return was grief. I could say something there about swearing being the common language of all programmers but I'll leave it at that :).

From what I can tell, so called inner classes were introduced in Java 5, and they allow you to do some pretty cool stuff. By having an inner class defined within an outer class:

When you compile a java class with inner classes, the resulting compiled bytecode class file whatsits (to use the technical terminology) are divided into outer classes and inner classes with a dollar sign:

% javac OuterClass.java
% ls -l
==> OuterClass.class
==> OuterClass$innerClass.class
% echo Grilled Cheese Sandwich
==> Grilled Cheese Sandwich

My Java linked list stack post shows how a outer link list class uses an inner Node class if you want to check it out. Another example is the Iterator class which belongs to Java's new and very nice to use lists that implement the List interface, other things I'll be blogging about soon once I've had a chance to play around with them more.

Personally I can already see how these could be abused, but I guess as with any great power comes great responsibility, and with any blog post comes the need for a cliché apparently!