You should only use an inner class when the definition of that class is ONLY related to the enclosing class. If you make it an inner class, then you never run the risk of some other programmer trying to use that class for something that it was not intended for. Conceptually an inner class should define something that is an integral part of the enclosing class. For instance, you might have a class for Body, which has inner classes for Eye, Heart, Kidney etc. This implies that you would not have an instance of Heart without understanding it in relation to the particular body that it belongs to and you would never create a Heart without the body. From Mother Natures point of view this makes all the sense in the world. Of course this makes it difficult to track Heart transplants. If you include an instance of another class in a class, then it is a "has a" relationship. A person "has a" spouse, but the spouse exists outside of the relationship to the person. The spouse person also has some meaning in the world that is unrelated to the fact that it is a spouse (probably ). For instance the spouse could be an employee of a company, with or without being married.
"JavaRanch, where the deer and the Certified play" - David O'Meara