Just a trick:) Not static inner classes give the opportunity elegantly implement Tree structure. Example (only immutable code is shown): interface INode { INode getParentNode(); Collection getChildrenNodes(); Data getSomeNodeData(); } class Default''''''Node implements INode { // members, initialization and mutable code has been omited private class Inner''''''Node extends Default''''''Node { public INode getParent''''''Node() { return Default''''''Node.this;// outer class } } public INode getParent''''''Node() { return null;// or INode.ROOT if you use NULL object pattern... } public Collection getChildren''''''Nodes() { return childrenNodes;// returns the Collection of Inner''''''Nodes } public Data getSome''''''Node''''''Data() { return data; } } -- KirillStepanosov