A class defines the blueprint for objects of a certain type. It contains variables to hold an object's state and methods to perform its behaviors. Constructors initialize new objects, while methods allow objects to interact. Objects are passed into methods by value for primitive types and by reference for class types. Classes use access modifiers like public and private to control variable and method visibility. Garbage collection automatically frees memory for unused objects. Method overloading and recursion allow methods to be reused in different contexts.