This document discusses the four types of inner classes in Java: static inner classes, member inner classes, local inner classes, and anonymous inner classes. Static inner classes can access only static members of the enclosing class and are compiled separately. Member inner classes are like instance variables and can access all members of the enclosing class. Local inner classes are defined within a method and can only access final local variables. Anonymous inner classes do not have a class name and implicitly extend or implement classes and interfaces.