Abstraction: a process of hiding the implementation details from the user
Abstract Data Type (ADT): a special data type that is defined by a set of values and a set of operations on that type
Encapsulation: a process of binding data and functions together into a single unit such that they are kept both safe from outside interference and misuse
Make the instance variables private so that they cannot be accessed directly from outside the class, only through getter() and setter() methods in the class to set and get the values of the fields
Inheritance: a process by which one class takes on the attributes and methods of another
super class: the class that child classes are derived from
sub class : newly formed class that can override or extend the attributes and methods of parent classes
Polymorphism (“many forms”): the ability of programming languages to present the same interface for differing underlying data types.