Encapsulation: the ability to declare classes and instantiate /create objects of the class;
the ability to declare variables and functions that operate on that data inside
the same data structure so that the internal workings are hidden from the outside.
Inheritance: the ability to declare classes that build off of existing classes by adding more
data, functionality and methods to them. This creates a hierarchical set of class structures.
Abstraction: fundamental data and methods that are necessary for a particular object; A "generic" object
as opposed to a specific type. Ex. Cat instead of tiger, jaguar, lion, and puma
The abstract class is more generic,while the dervied/descendent classes are much more
specific than their ancestors.
Polymorphism: somewhat of the opposite of Abstraction; a method that is shared among a class and it's descendents, but more functionality is added at each generation. The abstract class has little or no implementation details, while the descendent classes add functionality, detail, and implementation.