Encapsulation refers to bundling together data and behaviors into a single unit called a class. The data and behaviors are inseparable. Encapsulation provides information hiding by separating the internal implementation details of an object from its external accessible properties and methods. This prevents unintended interactions and dependencies that could arise if all data was globally accessible. Access specifiers like public, private, and protected determine which data and methods are accessible from inside or outside the class. Encapsulation builds a protective barrier around data to keep it safe from accidental modification or access from outside the class.