É a habilidade de um objeto em esconder dados da visão exterior, permitindo acesso somente por meio de métodos públicos.
Ex: (getters, setters).
Consiste em usar modificadores de acesso privados e fornecer métodos que possam acessá-los de forma segura. Ajuda a prevenir problemas de acesso indevido a dados.
Ex: Sistemas bancários.
Classes Abstratas
São aquelas que não criam instâncias e possuem métodos sem implementação. São como um molde para serem manipulados por subclasses.
Estas subclasses sobrecarregam os métodos abstratos.
Herança
Permite criar novas classes a partir de classes já existentes, sendo elas filhas da classe principal. Permite a reutilização de código e o compartilhamento de características que poder ser especificadas nas classes que as herdam.
Ex:
Classe Pessoa
Classe Funcionário: Pessoa
Classe Cliente: Pessoa
Como podemos observar a classe pai (Pessoa) tem suas características herdadas pelas classes Funcionário e Cliente, pois ambos podem ser pessoas.
OBS: Em C# herança é determinada com dois pontos. O que em Java seria extends.
Interfaces
Interfaces definem métodos que as classes têm de implementar, não implementam métodos, mas determinam a forma que eles serão implementados. É muito útil quando há a necessidade de um grupo de classes compartilharem um conjunto de características.
Polimorfismo
Polimorfismo (várias formas), Em OO e a situação na qual um objeto pode adquirir maneiras diferentes dependendo de como foi criado. As superclasses (classes pai) tem seus métodos sobrecarregados por subclasses (classes filhas) podendo elas implementá-los da forma que for conveniente.
Ex:
Classe Veículo (Superclasse)
Classe carro: Veículo (subclasse)
Classe Bicicleta: Veículo (subclasse)