Encapsulation is accomplished when each object maintains a private state, inside a class.
Other objects can not access this state directly, instead, they can only invoke a list of public functions.
The object manages its own state via these functions and no other class can alter it unless explicitly allowed.
In order to communicate with the object, you will need to utilize the methods provided.</br>
Abstraction is an extension of encapsulation.
It is the process of selecting data from a larger pool to show only the relevant details to the object.
Inheritance is the ability of one object to acquire some/all properties of another object.
Polymorphism gives us a way to use a class exactly like its parent so there is no confusion with mixing types.
This being said, each child sub-class keeps its own functions/methods as they are.