- Java inner classes are classes declared within other classes or interfaces. They allow grouping of logically related classes and interfaces and can access all members of the outer class, including private ones. - There are three main advantages of inner classes: they can access private members of the outer class, they make code more readable by grouping related classes, and they require less code. - The two types of inner classes are non-static (inner) classes and static nested classes. Non-static classes can access outer class members like private variables while static classes cannot access non-static members only static ones. - Examples demonstrate member inner classes, anonymous inner classes, local inner classes, and static nested classes in Java and how they can