5.1 Classes, Superclasses, and Subclasses5.1.1 Defining Subclasses5.1.2 Overriding Methods5.1.3 Subclass Constructors5.1.4 Inheritance Hierarchies5.1.5 Polymorphism5.1.6 Understanding Method Calls5.1.7 Preventing Inheritance: Final Classes and Methods5.1.8 Casting5.1.9 Abstract Classes5.1.10 Protected Access5.2 Object: The Cosmic Superclass5.2.1 The equals Method5.2.2 Equality Testing and Inheritance5.2.3 The hashCode Method5.2.4 The toString Method5.3 Generic Array Lists5.3.1 Accessing Array List Elements5.3.2 Compatibility between Typed and Raw Array Lists5.4 Object Wrappers and Autoboxing5.5 Methods with a Variable Number of Parameters5.6 Enumeration Classes5.7 Reflection5.7.1 The Class Class5.7.2 A Primer on Catching Exceptions5.7.3 Using Reflection to Analyze the Capabilities of Classes5.7.4 Using Reflection to Analyze Objects at Runtime5.7.5 Using Reflection to Write Generic Array Code5.7.6 Invoking Arbitrary Methods5.8 Design Hints for Inheritance