(1) Tanto as classes abstratas quanto as interfaces podem ter métodos abstratos.
(2) As interfaces só podem ter constantes, não variáveis, enquanto as classes abstratas podem ter constantes e variáveis.
(3) Classes abstratas também podem ter métodos não abstratos, mas interfaces não.
Ao projetar um programa, você deve determinar se deseja usar classes ou interfaces abstratas com base em análises específicas. Além de fornecer métodos abstratos importantes que precisam ser substituídos por subclasses, as classes abstratas também fornecem variáveis e métodos não abstratos que as subclasses podem herdar.
Se um determinado problema precisa ser melhor resolvido usando herança, por exemplo: além de substituir o método abstrato da classe pai, a subclasse também precisa herdar algumas variáveis ou herdar alguns métodos não abstratos importantes da classe pai, você pode considere usar o tipo abstrato. Se um determinado problema não requer herança, mas apenas várias classes para fornecer detalhes de implementação de alguns métodos abstratos importantes, você pode considerar o uso de interfaces.
Nota : A interface JDK1.8 suporta métodos estáticos e métodos padrão.
1) As interfaces não podem ser usadas para instanciar objetos.
2) A interface não possui método construtor.
3) Todos os métodos na interface devem ser métodos abstratos.
4) As interfaces não podem conter variáveis de membro, exceto variáveis estáticas e finais.
5) A interface não é herdada pela classe, mas implementada pela classe.
6) A interface suporta herança múltipla.
O método padrão significa que a interface pode ter métodos de implementação e não precisa de uma classe de implementação para implementar seus métodos. Você só precisa adicionar a palavra-chave padrão na frente do nome do método para implementar o método padrão. Os métodos padrão fornecem uma maneira de estender uma interface sem quebrar o código existente.
(1) Uma interface pode ter vários métodos padrão e métodos estáticos.
(2) O método padrão é chamado por meio da instância e o método estático é chamado por meio do nome da interface.
(3) A palavra-chave padrão só pode ser usada em interfaces.
(4) Os métodos padrão podem ser herdados. Se você herdar várias interfaces e várias interfaces definirem vários métodos padrão iguais, a classe de implementação precisará substituir os métodos padrão, caso contrário, um erro será relatado.
(5) Os métodos estáticos não podem ser herdados e substituídos, portanto, só podem ser chamados pela interface específica.
Nota : Após o JDK 1.9, os métodos podem ser definidos como privados, para que certos códigos reutilizados não exponham os métodos.