Uma classe que contém o modificador abstrato é uma classe abstrata e uma classe abstrata não pode criar objetos de instância. Classes contendo métodos abstratos devem ser definidas como classes abstratas, e métodos em classes abstratas não precisam ser abstratos. Métodos abstratos definidos em uma classe abstrata devem ser implementados em uma subclasse concreta, portanto não pode haver construtores abstratos ou métodos estáticos abstratos. Se a subclasse não implementar todos os métodos abstratos na classe pai abstrata, então a subclasse também deverá ser definida como tipo abstrato.
Pode-se dizer que uma interface é um caso especial de uma classe abstrata, e todos os métodos na interface devem ser abstratos. As definições de método na interface são padronizadas para o tipo público abstrato e os tipos de variáveis de membro na interface são padronizados para public static final.
Vamos comparar as diferenças gramaticais entre os dois :
1. Classes abstratas podem ter construtores, mas interfaces não podem ter construtores.
2. Pode haver variáveis de membro comuns em classes abstratas, mas não existem variáveis de membro comuns em interfaces.
3. Classes abstratas podem conter métodos comuns não abstratos. Todos os métodos na interface devem ser abstratos e não pode haver métodos comuns não abstratos.
4. Os tipos de acesso de métodos abstratos em classes abstratas podem ser públicos, protegidos e (tipo padrão, embora
Nenhum erro é relatado no Eclipse, mas não deve funcionar), mas o método abstrato na interface só pode ser do tipo público e o padrão é do tipo público abstrato.
5. Classes abstratas podem conter métodos estáticos, mas interfaces não podem conter métodos estáticos.
6. Tanto as classes abstratas quanto as interfaces podem conter variáveis de membros estáticos. O tipo de acesso das variáveis de membros estáticos em classes abstratas pode ser arbitrário, mas as variáveis definidas nas interfaces só podem ser do tipo final estático público, e o padrão é o tipo final estático público.
7. Uma classe pode implementar múltiplas interfaces, mas só pode herdar uma classe abstrata.
Vamos falar sobre as diferenças entre os dois na aplicação :
As interfaces desempenham um papel mais importante nos métodos de design de arquitetura de sistema e são usadas principalmente para definir contratos de comunicação entre módulos. As classes abstratas desempenham um papel na implementação do código e podem realizar a reutilização do código. Por exemplo, o padrão de design do método de modelo é uma aplicação típica de classes abstratas. Presume-se que todas as classes Servlet em um projeto devem usar o mesmo método para determinar permissões e registrar. acesso. Registrar e tratar exceções, então você pode definir uma classe base abstrata para que todos os Servlets herdem essa classe base abstrata. No método de serviço da classe base abstrata, o julgamento de permissão, o registro do log de acesso e o código de tratamento de exceções são concluídos. preencha apenas seus respectivos códigos de lógica de negócios. O pseudocódigo é o seguinte: