Diferenças entre classe abstrata e interface em Java Diferença entre

Anonim

Classe abstrata versus 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 super classe de outras classes que, de fato, permite ampliar a classe abstrata. Uma palavra-chave abstrata é usada na declaração de uma classe abstrata. Assim como qualquer outra classe teria, a classe abstrata tem campos que descrevem métodos e características que a classe pode executar. Pela simples 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 implementadas. A interface, portanto, serve como um link entre o produtor e o consumidor. 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, isso 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 utilizados nas interfaces. Interfaces não podem ter nenhum código de implementação usado neles, e pode haver código de implementação usado na classe abstrata. Os códigos de implementação implantados 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 pode 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 seja "público". '"

Uma classe abstrata herdará automaticamente a classe de objeto. Isso, de fato, significa que métodos como clone () e equal () 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 possui uma função muito importante com a implementação de múltiplas heranças, já que uma classe só pode ter uma super classe. Embora apenas uma super-classe possa estar presente, ela pode ser implementada em qualquer número de interfaces. Não é possível ter múltiplas 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, contudo, tornou-se mais lenta devido às modernas máquinas virtuais de Java que continuamente estão sendo atualizadas.

Adicionar um método em uma interface requer que você rastreie todas as classes de implementação que implementam a interface específica. Alternativamente, você pode ampliar a interface de modo a permitir que ela tenha 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 continua funcionando. Na medida em que existem diferenças entre classes abstratas e interfaces, é importante notar que não são rivais, mas as diferenças aqui mencionadas servem para se complementar.

Resumo

  1. Os campos de classe abstratos 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 ele 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 do que a interface na implementação.