An object has both data and methods that manipulate that data. The data represents the state of the object. A class describes the fields and methods of objects that belong to that class. Classes form a hierarchy where subclasses inherit fields and methods from their parent classes. Objects must be created from their classes using constructors before their fields and methods can be accessed.