A classe abstrata e a interface são usadas principalmente para abstração, porém são muito diferentes umas das outras. Ambos são parte principal do Java, mas têm seus próprios usos de aplicativos. Embora ambos os termos possam ser sinônimos entre si, eles não podem ser usados de forma intercambiável.
Existem diferenças significativas entre os dois. Enquanto um método de interface é abstrato por padrão, um abstrato pode conter métodos abstratos e não abstratos. Bem, desde o Java 8, as interfaces também têm implementações de métodos e podem ter métodos estáticos e padrão em Java. Vamos estudar a diferença entre os dois em detalhes.
Uma classe abstrata em Java é uma classe declarada abstrata - pode ou não conter métodos abstratos. É bastante semelhante a uma interface Java, exceto pelo fato de poder conter a implementação do método padrão. Como na programação orientada a objetos, a abstração em Java é obtida usando classes e interfaces abstratas. Em Java, abstração significa ocultar os detalhes irrelevantes do usuário para focar apenas nos detalhes essenciais para aumentar a eficiência, reduzindo assim a complexidade. A palavra-chave "resumo" é usada para criar uma classe abstrata imediatamente antes da palavra-chave da classe na declaração da classe.
Uma classe abstrata pode ou não conter métodos de abstração (métodos sem corpo), mas se uma classe tiver pelo menos um método de abstração, ela deve ser declarada abstrata. No entanto, métodos não abstratos também podem ser usados apenas em uma classe abstrata, mas apenas para implementar o comportamento padrão. Os métodos em uma classe abstrata podem ter modificadores de acesso, como privado, público, estático e protegido, dependendo do nível de visibilidade. Uma classe abstrata não pode ser instanciada e não fornece 100% de abstração devido ao fato de poder ter um método concreto.
Uma interface que se parece com uma classe, não é. Como o Java não suporta várias heranças, uma interface às vezes é ideal para fornecer base para a hierarquia de classes. Uma interface é mais uma planta de uma classe que também é usada para obter abstração em Java. Ele contém métodos abstratos e constantes estáticas. Em termos simples, uma interface é uma coleção de métodos abstratos usados para especificar um comportamento que a classe precisa implementar. Diferentemente da classe abstrata, uma interface fornece abstração completa em Java. Ele pode ter métodos e variáveis como uma classe, no entanto, os métodos declarados na interface são abstratos por padrão..
Classe abstrata | Interface |
A palavra-chave abstract é usada para criar uma classe abstrata e pode ser usada com métodos. | A palavra-chave Interface é usada para criar uma interface, mas não pode ser usada com métodos. |
Uma classe pode estender apenas uma classe abstrata. | Uma classe pode implementar mais de uma interface. |
Uma classe abstrata pode ter métodos abstratos e não abstratos. | Uma interface pode ter apenas métodos abstratos. |
As variáveis não são finais por padrão. Pode conter variáveis não finais. | As variáveis são finais por padrão em uma interface. |
Uma classe abstrata pode fornecer a implementação de uma interface. | Uma interface não pode fornecer a implementação de uma classe abstrata. |
Pode ter métodos com implementações. | Ele fornece abstração absoluta e não pode ter implementações de métodos. |
Pode ter modificadores de acesso público, privado, estático e protegido. | Os métodos são implicitamente públicos e abstratos na interface Java. |
Não suporta múltiplas heranças. | Ele suporta múltiplas heranças. |
É ideal para reutilização de código e perspectiva de evolução. | É ideal para declaração de tipo. |
A classe abstrata e a interface são usadas para abstração; no entanto, eles têm seu quinhão de diferenças. A principal diferença entre os dois é motivada por métodos de abstração. Enquanto o primeiro pode ou não ter métodos abstratos, o último é implicitamente abstrato. Uma classe abstrata pode ter métodos abstratos e não abstratos. Uma interface, por outro lado, pode ter apenas métodos abstratos, portanto, não pode ter implementação, o que significa simplesmente que uma interface não pode ter métodos não abstratos. Uma classe abstrata não pode ser instanciada, o que proíbe a criação de um objeto. Uma interface, por outro lado, pode parecer uma classe, mas não é.