Encapsulation
The idea is to form abstractions which hide certain details from the outside world, in particular details of the implementation. Serve two purposes:
differentiation between the specification and implementation of an operation; and
the desire to achieve modularity.
Abstract Data Type allows the implementation of the type to be changed without requiring any changes outside the module in which it is defined.
Overloading, Overwriting, and Late Binding
Overloading:
The same method, but with a different implementation, may be defined several times in a class hierarchy.
Overwriting:
If a message is sent to an object, the most specific implementation of the method should be executed; this implementation overwrites all the other possible implementations.
Late binding:
To implement overwriting, a late binding of implementations of method calls is required, which defers the decisions about which is to be executed to run time.