Herança
Objetos de uma mesma classe podem tirar proveito de relações de herança, onde objetos 
recém-criados absorvem características de outros já existentes e adicionam-se novas 
características. Um exemplo disso, sem fugir do nosso exemplo anterior, são os livros. 
Na verdade, eles são blocos de papéis que possuem capas e apresentam algum conteúdo 
em suas páginas. Os livros herdaram as características dos "blocos de papéis", como 
quantidade de folhas, flexibilidade, etc e foi adicionada a opção de ter uma capa e 
um conteúdo. Assim fica fácil de entender né? ;)
Polimorfismo
Pensemos agora um pouco em relação ao grupo dos objetos animados. Peguemos a Carla, 
que é um objeto da classe criança. Andar é um de seus métodos certo? É certo que não é 
um andar muito bonito, se apóia aqui, se apóia ali, mas cumpre o seu objetivo que é 
ir do ponto A para o ponto B. 
Já o pai dela, o João, que é um objeto da classe adulto, tem o mesmo método, que é 
também Andar. Ele vai de um ponto A para o ponto B sempre que desejar, com a diferença 
que seus passos são firmes. O método é o mesmo nos dois casos, mas com ele funciona 
diferente. É para isso que existe o polimorfismo, para que isso possa ser implementado. 
Já viu como está o nosso mundo? Temos João, que é um Adulto, temos a pequena Carla, que 
é uma Criança. Ambos são seres vivos, e por causa da característica de serem seres 
vivos fazem parte do grupo dos objetos animados. Só que a Carla adora desenhar e de 
presente posso dar para ela o Caderno, que é um objeto da classe dos 
"blocos de papéis", que por sua vez faz parte do grupo dos objetos inanimados. Mas 
poxa, como ela vai escrever? É para isso que existem os construtores. 
Um construtor é um método que permite criar um objeto à custa de uma determinada 
classe. Tendo conhecimento de como criá-lo, eu faço criar um objeto que eu quero chamar 
de Lápis. Ele vai ser de uma classe chamada "escrevedores" (foi mal, mas não achei um 
nome melhor) que também fará parte dos objetos inanimados. Agora sim, Carla pode brincar 
à vontade com o seu lápis e o seu caderno, podendo desenhar quando quiser.
Viu como no mundo da POO tudo está relacionado? Eu diria que é um pouco de 
brincar de Deus... Algo poderoso quando se tem o conhecimento necessário! :)
Encapsulamento
Digamos que o objeto animado João é um médico. Ser médico é um de seus atributos. Todos 
os dias ele vai trabalhar em seu A4 preto, o carro mais potente do mundo (eita mentira 
né?). João sabe que para fazer o carro andar ele precisa somente colocar a chave, girá-la 
e o carro liga, daí é só pisar no acelerador para começar a se locomover. Mas, 
será que ele, com o seu nulo conhecimento em mecânica, sabe o que acontece quando ele 
gira a chave? Duvido! E é isso que quer dizer o encapsulamento. João pode não sabe como 
seu carro funciona, mas sabe como fazer funcionar.
Logo, o encapsulamento é o processo pelo qual se escondem os detalhes de 
implementação nas Classes. Além disso, é importante frisar que o motor de um carro tem 
um funcionamento independente das outras partes, como direção, pneus, bancos, etc. Ou 
seja, mesmo que um carro não tenha as quatro rodas, isto não impede de o motor funcionar, 
pois ele funciona como uma unidade independente, uma "caixa-preta".
Que tal um outro exemplo mais prático? Está vendo essa tela? O campo para busca, os botões 
no menu, esse texto em si? Você não sabe como eles estão aqui, o que existe por trás 
dessa tela, mas sabe que existe toda uma implementação que nos foi escondida (ainda bem 
né? ;P)... Entendeu?
E, finalmente, a...
Abstração
Criamos um mundo - bem diferente do real, é verdade, mas nele podemos brincar à vontade - 
com seus objetos, suas classes, seus comportamentos. Esse ato de representar cenários 
complexos com termos simples, de imaginar o mundo como um conjunto, de dividir os objetos 
para melhor classificá-los, de dar características e métodos, é o que chamamos de abstração.
É graças à abstração que podemos pensar em praias em vez de grãos de areia, em trânsito 
em vez de um só carro, em florestas em vez de árvores... Enfim, é através da abstração 
que podemos imaginar a lógica necessária para entender o nosso problema e montar a sua 
solução. Com a abstração vem uma maior facilidade de utilização da classe, diminuição 
da probabilidade de enganos, aumento na rapidez do desenvolvimento e melhoria na 
legibilidade do código.