Pilares da Orientação a Objeto?
Encapsulamento: serve para controlar o acesso aos atributos e métodos de uma classe. É uma forma eficiente de proteger os dados manipulados dentro da classe, além de determinar onde esta classe poderá ser manipulada. Em uma classe na linguagem Java por exemplo, usamos os métodos Getters and Setter que tem o objetivo de controlar o acesso a cada um dos atributos e operações de uma certa classe. Ou seja, tem a função de disponibilizar externamente os métodos que alteram e acessam (lê) os atributos de uma classe.

Interfaces em Java
Como uma classe, uma interface pode ter métodos e variáveis, mas os métodos declarados em uma interface são abstratos por padrão (apenas assinatura de método, sem corpo).
Sintaxe para declaração de interface
interface {
//métodos
}
Para usar uma interface em sua classe, acrescente a palavra-chave “implements” após o nome da classe, seguido pelo nome da interface.
Exemplo para implementação de interface
class Cachorro implements Animal
interface AnimalCaseiro extends Animal
Classe Abstrata
Uma classe que é declarada com a palavra-chave abstract é conhecida como classe abstrata em Java. Pode haver métodos abstratos e não abstratos (método com o corpo).
Antes de aprender a classe abstrata Java, vamos primeiro entender a abstração em Java. Abstração é um processo de ocultar os detalhes de implementação e mostrar apenas a funcionalidade ao usuário.