So far in our exploration of Java, we have seen how to create Java classes and objects, which are instances of those classes. By themselves, classes would be little more than a convention for organizing code. It is in the relationships between objects—their connections and privileges with respect to one another—that the power of an object-oriented language is really expressed.
That’s what we’ll cover in this chapter. In particular, we’ll look at several kinds of relationships:
How a class inherits methods and variables from its parent class
How to declare that a class implements certain behavior and define a type to refer to that behavior
How to organize objects into logical groups
A generalization of classes that lets you nest a class definition inside another class definition