Source: http://www.cs.cornell.edu/courses/cs211/2006fa/Sections/S8/innerclasses.pdf