The hiding of data implementation by restricting access to accessors and mutators.
Representation of data in which the implementation details are hidden.
For examplem, the development of classes, objects, types in terms of their interfaces and functionality, instead of their implementation details.
Abstraction is used to manage complexity (decompose complex systems into smaller components).
The ability to derive new classes from existing classes.
Polymorphism describes a pattern in object oriented programming in which classes have different functionality while sharing a common interface.
Eg. shape object.