Through the use of inheritance, all or parts of an existing abstract data type can be used in the construction of new abstract data types. New data types can be created by acquiring, restricting, and extending the attributes and services previously defined in another related data type. An extension to simple inheritance from one data type ancestor, is multiple inheritance. Multiple inheritance schemes allow new data types to be formed from the combination of attributes and services from several different existing data types. The generalization and specialization of abstract data types through simple inheritance and multiple inheritance allows a classification structure of the system's elements to be represented that illustrates the relationships among the elements.
Message passing provides the strict interface between objects that is required for encapsulation.
Message passing is communicating with an object to request that a service be performed. Since the data structure within an object can not be manipulated directly, a message is sent to the object whenever manipulation is desired. As a matter of convenience and as an aid to reusability, it is sometimes desirable to send the same message to objects of different types and have each object respond in the way appropriate for its type. Polymorphism facilitates this by permitting operators and services to have multiple meanings. Polymorphism allows operator overloading, which means operators can be defined so that they operate differently on different types of data.