Object Oriented programming can roughly be descrbed using four key concepts, Inheritance, Encapsulation, apolymorphism, and Abstraction. Within these concept lie object oriented tools and buliding blocks which create and reinforce the key concepts.
Abstraction is the practice of showing only essential features of an application and hiding the details and inner workings (Like seeing the buttons of a remote control, but not the wires and circuit boards). The tools and that power this practice are the Classes, Objects, and Interface. The way these tools and methods are implemented are with the other three concepts of Inheritance, Encapsulation, and Polymorphism.
The concept of iheritance is a means of reusing code. It manifests itself through the Classes. The Classes contain the blueprint from which the application is created. Classes are organized in a hierarchy. The basic idea is that the more peripheral "Derived Classes" can inherit the attributes and methods contained in a "Base Class".
Objects are essentially software bundles containing methods for observing, collecting, and modifying the state of data contained within. Objects belong to Classes.
Encapsulation is another trait of "Class". It focuses on the implementation that gives rise to Abstraction through information hiding, which is the process of concealing the parts of an object that do not contribute to its essential characteristics. Functions, variables, and methods can be encapsulated in Classes.
All of these key concepts feed each other. In polymorphism, this involves the redefining or repurposing of functions, so that they can handle many types and quantities of arguments.
Implementing these concepts, objects of different types can be accessed through the same interface.