Inheritance allows new classes to be created from existing classes. This allows code reuse and establishes an is-a relationship between classes. There are different types of inheritance including single, multilevel, multiple and abstract inheritance. When inheriting from a base class, the derived class gains access to properties and methods of the base class. Constructors are called from base to derived during object instantiation. Methods can be overridden in derived classes to change behavior. Multiple inheritance introduces ambiguity that must be resolved using scope resolution.