Une classe contenant le modificateur abstrait est une classe abstraite et une classe abstraite ne peut pas créer d'objets d'instance. Les classes contenant des méthodes abstraites doivent être définies comme classes abstraites, et les méthodes des classes de classes abstraites ne doivent pas nécessairement être abstraites. Les méthodes abstraites définies dans une classe abstraite doivent être implémentées dans une sous-classe concrète, il ne peut donc pas y avoir de constructeurs abstraits ou de méthodes statiques abstraites. Si la sous-classe n'implémente pas toutes les méthodes abstraites de la classe parent abstraite, alors la sous-classe doit également être définie comme type abstrait.
Une interface peut être considérée comme un cas particulier de classe abstraite, et toutes les méthodes de l'interface doivent être abstraites. Les définitions de méthode dans l'interface sont par défaut de type public abstract et les types de variables membres dans l'interface sont par défaut public static final.
Comparons les différences grammaticales entre les deux :
1. Les classes abstraites peuvent avoir des constructeurs, mais les interfaces ne peuvent pas avoir de constructeurs.
2. Il peut y avoir des variables membres ordinaires dans les classes abstraites, mais il n'y a pas de variables membres ordinaires dans les interfaces.
3. Les classes abstraites peuvent contenir des méthodes ordinaires non abstraites. Toutes les méthodes de l'interface doivent être abstraites et il ne peut pas y avoir de méthodes ordinaires non abstraites.
4. Les types d'accès des méthodes abstraites dans les classes abstraites peuvent être publics, protégés et (type par défaut, bien que
Aucune erreur n'est signalée sous Eclipse, mais cela ne devrait pas fonctionner), mais la méthode abstraite dans l'interface ne peut être que de type public, et la méthode par défaut est de type abstrait public.
5. Les classes abstraites peuvent contenir des méthodes statiques, mais les interfaces ne peuvent pas contenir de méthodes statiques.
6. Les classes abstraites et les interfaces peuvent contenir des variables membres statiques. Le type d'accès aux variables membres statiques dans les classes abstraites peut être arbitraire, mais les variables définies dans les interfaces ne peuvent être que de type final statique public, et la valeur par défaut est de type final statique public.
7. Une classe peut implémenter plusieurs interfaces, mais ne peut hériter que d'une seule classe abstraite.
Parlons des différences entre les deux en application :
Les interfaces jouent davantage un rôle dans les méthodes de conception d’architecture système et sont principalement utilisées pour définir des contrats de communication entre modules. Les classes abstraites jouent un rôle dans l'implémentation du code et peuvent réaliser la réutilisation du code. Par exemple, le modèle de conception de méthode modèle est une application typique des classes abstraites. On suppose que toutes les classes Servlet d'un projet doivent utiliser la même méthode pour déterminer les autorisations et enregistrer. accès. Enregistrez et gérez les exceptions, puis vous pouvez définir une classe de base abstraite afin que tous les servlets héritent de cette classe de base abstraite. Dans la méthode de service de la classe de base abstraite, le jugement des autorisations, l'enregistrement du journal d'accès et le code de gestion des exceptions sont terminés. complétez uniquement leurs codes de logique métier respectifs. Le pseudo-code est le suivant :