Encapsulamento é a técnica que faz com que detalhes internos do funcionamento dos métodos de uma classe permaneçam ocultos para os objetos. Por conta dessa técnica, o conhecimento a respeito da implementação interna da classe é desnecessário do ponto de vista do objeto, uma vez que isso passa a ser responsabilidade dos métodos internos da classe.
Assim que uma classe é criada, seu código e seus dados, os quais são chamados de membros da classe, são determinados. Esses dados recebem o nome de variáveis membro ou variáveis de instância. Já o código tem outra função de formar os métodos, os quais também podem ser denominados como métodos membro.
Tendo em mente que os métodos e as variáveis de uma classe podem ser definidos como públicos ou privados, temos a seguinte situação:
- Tudo o que o usuário externo precisa conhecer a respeito de uma classe encontra-se em propriedades ou métodos declarados como públicos (public).
- Somente os códigos membros da classe são capazes de acessar seus métodos e variáveis privados. Isso garante que não ocorrerão ações inadequadas, mas exige que a interface pública seja planejada com cautela para que o funcionamento interno da classe não seja muito exposto.
Fonte: http://www.devmedia.com.br/conceitos-encapsulamento-programacao-orientada-a-objetos/18702
OBS.: a letra B traz o conceito de herança e a letra C o conceito de polimorfismo.
Bons estudos!