There are three ways to design classes: by composition, via inheritance, and via interface . Composition (or aggregation) is achieved by using existing class as a part of a new class. For example, the ArrayStack class includes an array of objects. Inheritance allows you to define a new class in terms of an old class.