Classes in a hierarchy are related by the is-a relationship. For example, a Nissan is-a Automobile, and a Sentra is-a Nissan. Java has features that allow programs to establish and work with hierarchies. Much of the power of object oriented programming comes from this.
An abstract class is a class that cannot be instantiated but that can be the parent of other classes. This is useful when you have a broad concept (like Automobile) but actual objects must be specific types (like Sentra).
This chapter also discusses polymorphism. Polymorphism is when a variable of a base type (like Automobile) can refer to various derived types (like Nissan or Sentra) as needed.
How many Valentine cards did you get this year?