Source: http://www.cs.umd.edu/~pugh/java/SecureInnerClasses.pdf