Diferenças entre classe abstrata e interface em Java

Classe abstrata vs interface em Java

Para entender as diferenças entre a classe abstrata e a interface em Java, é importante, antes de tudo, entender cada uma delas independentemente. A classe abstrata em Java é usada na declaração de subclasses com um conjunto de características comuns. O uso comum da classe abstrata é uma superclasse de outras classes que, com efeito, permite estender a classe abstrata. Uma palavra-chave abstrata é usada na declaração de uma classe abstrata. Assim como qualquer outra classe teria, a classe abstrata possui campos que descrevem métodos e características que a classe pode executar. Pela mera declaração de uma classe abstrata, a classe não pode ser iniciada

Uma interface Java pode ser equiparada a um protocolo. Representa um comportamento predefinido e acordado que permite a facilitação da interação de objetos não relacionados. Dependendo do usuário, a interface mantém a chave para diferentes ações sendo implementadas. A interface, portanto, serve como um link entre o produtor e o consumidor. As interfaces em Java são, portanto, um grupo de métodos contendo corpos vazios que podem ter declarações constantes. Ao expor uma classe à interface Java, significa que o comportamento esperado da classe é a implementação de todos os métodos da interface.


Diferenças

Primeiro, uma classe abstrata permite campos que não são estáticos ou finais, em oposição aos campos estáticos e finais usados ​​nas interfaces. As interfaces não podem ter nenhum código de implementação usado nelas, e pode haver código de implementação usado na classe abstrata. Os códigos de implementação lançados na classe abstrata podem ter alguns ou todos os métodos implementados. Por padrão, todos os métodos da interface são "abstratos".

A visibilidade também é possível para métodos ou membros de uma classe abstrata que podem variar como pública, protegida, privada ou nenhuma. A visibilidade da interface, por outro lado, só pode ser predefinida para um modo de visibilidade que é "público".

Uma classe abstrata herdará automaticamente a classe de objeto. Com efeito, isso significa que métodos como clone () e igual () estão incluídos. Em uma interface, nenhuma herança da classe de objeto é possível. Depois disso, a classe abstrata tem a capacidade de ter um construtor, mas uma interface não pode ter um.

A interface em Java também tem uma função muito importante com a implementação de várias heranças, uma vez que uma classe pode ter apenas uma superclasse. Embora apenas uma superclasse possa estar presente, ela pode ser implementada em qualquer número de interfaces. Não é possível ter várias heranças em uma classe abstrata.

No desempenho, as interfaces tendem a ser mais lentas na implementação, em oposição à classe abstrata, principalmente devido à direção extra de encontrar o método correspondente em uma classe. A diferença, no entanto, tornou-se mais lenta devido às modernas máquinas virtuais Java que estão sendo atualizadas continuamente.

A adição de um método em uma interface requer que você localize todas as classes de implementação que implementam a interface específica. Como alternativa, você pode estender a interface para permitir métodos extras. Se você estiver lidando com uma classe abstrata, tudo o que é necessário é adicionar a implementação padrão do método e o código continuará funcionando. Como existem diferenças entre classes abstratas e interfaces, é importante observar que elas não são rivais, mas as diferenças mencionadas neste documento servem para se complementarem..  

Sumário

  1. Os campos de classe abstrata não são estáticos ou finais, em oposição à interface que possui tabelas estáticas e finais.

  2. Nenhum código de implementação pode ser usado em interfaces enquanto pode ser usado na classe abstrata.

  3. A visibilidade da interface só pode ser pública, enquanto a visibilidade da classe abstrata pode variar.

  4. Uma classe abstrata herdará automaticamente a classe de objeto, mas não é possível na interface.

  5. A classe abstrata é mais rápida que a interface na implementação.