This document provides an overview of generic classes in Java. It discusses key concepts such as generic classes and interfaces, type erasure, wildcards, inheritance and polymorphism as they relate to generics. The document begins with an introduction to non-generic classes and the limitations they present. It then covers how generics were introduced in Java 5 to allow for compile-time type safety and elimination of unnecessary casting. The concepts are illustrated through examples of generic List implementations. Later sections discuss specifics of type erasure and its implications, as well as how inheritance, wildcards and bounds work for generics. The overview concludes by noting advantages generics provide and some limitations due to type erasure.