Inheritance allows a class to extend an existing class, known as the parent or superclass. The extending class is called the child or subclass. The child inherits methods and data from the parent but can also define new behaviors. This creates a hierarchical relationship between classes and promotes code reuse. Abstract classes represent general concepts that should not be instantiated directly but provide common functionality to subclasses through abstract and implemented methods.