L'incapsulazione è un meccanismo che consiste nel raccogliere i dati e i metodi all'interno di una struttura nascondendo l'implementazione dell'oggetto, cioè impedendo l'accesso ai dati con altri mezzi diversi dai servizi proposti. L'incapsulazione permette quindi di garantire l'integrità dei dati contenuti nell'oggetto.
L'utente di una classe non deve per forza conoscere in che modo sono strutturati i dati nell'oggetto, cioè non è tenuto a conoscere l'implementazione. Così, impedendo all'utente di modificare direttamente gli attributi, e obbligandolo ad usare le funzioni definite per modificarli (dette interfacce), si assicura l'integrità dei dati (si potrà ad esempio assicurare che il tipo di dati forniti sia conforme alle nostre attese, oppure che i dati si trovino effettivamente nell'intervallo atteso).
L'incapsulazione permette di definire dei livelli di visibilità degli elementi della classe. Questi livelli di visibilità definiscono i diritti di accesso ai dati a seconda che vi si acceda con un metodo della classe stessa, di una classe ereditaria, oppure di una classe qualsiasi. Esistono tre livelli di visibilità: