Object oriented programming organizes a program around objects and well defined interfaces to access data. Procedural programming follows procedures while OOP uses objects that combine data and code. Encapsulation binds code and data, inheritance allows objects to acquire properties of another, and polymorphism allows a common interface for general actions. Constructors initialize objects on creation while methods operate on class instances. Inner classes can be defined within other classes or methods.