Différence entre classe abstraite et interface en Java

La classe abstraite et l'interface sont toutes deux principalement utilisées pour l'abstraction, mais elles sont très différentes les unes des autres. Les deux font partie intégrante de Java mais ont leurs propres applications. Bien que les deux termes puissent être synonymes, ils ne peuvent pas être utilisés indifféremment..

Il existe des différences significatives entre les deux. Alors qu'une méthode d'interface est abstraite par défaut, un résumé peut contenir des méthodes abstraites et non abstraites. Eh bien, depuis Java 8, les interfaces ont également des implémentations de méthodes et peuvent avoir des méthodes statiques et par défaut en Java. Etudions la différence entre les deux en détail.

Qu'est-ce qu'une classe abstraite en Java??

Une classe abstraite en Java est une classe déclarée abstraite - elle peut contenir ou non des méthodes abstraites. Il ressemble beaucoup à une interface Java, à la différence qu'il peut contenir une implémentation de méthode par défaut. Comme dans la programmation orientée objet, l'abstraction en Java est réalisée à l'aide de classes abstraites et d'interfaces. En Java, abstraction signifie masquer les détails non pertinents à l'utilisateur pour se concentrer uniquement sur les détails essentiels afin d'accroître l'efficacité et de réduire ainsi la complexité. Le mot clé «abstract» est utilisé pour créer une classe abstraite juste avant le mot clé class dans la déclaration de classe..

Une classe abstraite peut contenir ou non des méthodes d'abstraction (méthodes sans corps), mais si une classe a au moins une méthode d'abstraction, elle doit être déclarée abstraite. Toutefois, les méthodes non abstraites ne peuvent également être utilisées que dans une classe abstraite, mais uniquement pour implémenter un comportement par défaut. Les méthodes d'une classe abstraite peuvent avoir des modificateurs d'accès tels que privé, public, statique et protégé, en fonction du niveau de visibilité. Une classe abstraite ne peut pas être instanciée et ne fournit pas une abstraction de 100% en raison du fait qu'elle peut avoir une méthode concrète.

Qu'est-ce qu'une interface??

Une interface ressemble à une classe, mais ce n’est pas le cas. Comme Java ne prend pas en charge les héritages multiples, une interface est parfois idéale pour fournir une base à la hiérarchie de classes. Une interface est plutôt un modèle de classe qui est également utilisé pour obtenir une abstraction en Java. Il contient des méthodes abstraites et des constantes statiques. En termes simples, une interface est un ensemble de méthodes abstraites utilisées pour spécifier un comportement que la classe doit implémenter. Contrairement aux classes abstraites, une interface fournit une abstraction complète en Java. Il peut avoir à la fois des méthodes et des variables comme une classe. Cependant, les méthodes déclarées dans interface sont abstraites par défaut..

Différence entre classe abstraite et interface en Java

  1. “Héritage multiple” de la classe abstraite et de l'interface en Java - Bien que la classe abstraite et l'interface soient principalement utilisées pour l'abstraction, elles sont assez différentes les unes des autres. Bien qu'une classe abstraite soit une classe, une interface est une interface. Cela signifie qu'une interface abstraite peut implémenter plusieurs héritages dans Java, même si une interface ne peut étendre que celle d'une autre interface Java. Eh bien, Java ne supporte pas les héritages multiples mais on peut implémenter plusieurs héritages en Java.
  2. “Type de méthode” de la classe abstraite et de l'interface en Java - La deuxième différence majeure entre les deux est que, même si une interface ne peut avoir que des méthodes abstraites, une classe abstraite peut avoir des méthodes abstraites et non abstraites. Cependant, depuis Java 8, une interface peut également avoir des méthodes par défaut et statiques.
  3. “Modificateurs d'accès” de la classe abstraite et de l'interface en Java - Une classe abstraite peut avoir des modificateurs d'accès publics, privés et protégés, mais les méthodes d'une interface sont implicitement publiques et abstraites. Vous ne pouvez utiliser aucun autre modificateur d'accès avec les méthodes d'interface '.
  4. “Implémentation” de la classe abstraite et de l'interface en Java - Une classe abstraite peut fournir l'implémentation d'une interface. Une interface, par contre, ne peut pas fournir l'implémentation d'une classe abstraite.
  5. “Mot-clé” de la classe abstraite et de l'interface en Java- Bien que le mot-clé «abstract» soit utilisé pour déclarer une méthode de classe abstraite abstraite, les interfaces sont toutefois une histoire totalement différente. ils ne peuvent avoir que des constantes finales statiques et publiques et des déclarations de méthodes.
  6. “Utilisation” de la classe abstraite et de l'interface en Java - Bien qu'une interface soit idéale pour la déclaration de type, une classe abstraite convient mieux à la réutilisation du code et à la perspective d'évolution. Une interface ressemble à une classe, mais ce n'est pas une classe.
  7. “Fiabilité” de la classe abstraite et de l'interface en Java- Une autre différence majeure entre une classe abstraite et une interface réside dans le fait que la première est un peu plus rapide que la seconde, car une recherche est généralement impliquée dans une interface avant que toute méthode surchargée ne soit appelée en Java..
  8. “Variables finales” de la classe abstraite et de l'interface en Java - Les variables déclarées dans une interface sont finales par défaut, alors qu'une classe abstraite peut contenir ou non des variables non finales.

Classe abstraite vs interface en Java: Tableau de comparaison

Classe abstraite Interface
Le mot-clé abstrait est utilisé pour créer une classe abstraite et peut être utilisé avec des méthodes.. Le mot clé interface est utilisé pour créer une interface, mais il ne peut pas être utilisé avec des méthodes..
Une classe ne peut étendre qu'une classe abstraite. Une classe peut implémenter plus d'une interface.
Une classe abstraite peut avoir des méthodes abstraites et non abstraites. Une interface ne peut avoir que des méthodes abstraites.
Les variables ne sont pas finales par défaut. Il peut contenir des variables non finales. Les variables sont finales par défaut dans une interface.
Une classe abstraite peut fournir l'implémentation d'une interface. Une interface ne peut pas fournir l'implémentation d'une classe abstraite.
Il peut avoir des méthodes avec des implémentations. Il fournit une abstraction absolue et ne peut pas implémenter de méthode..
Il peut avoir des modificateurs d'accès public, privé, statique et protégé. Les méthodes sont implicitement publiques et abstraites en interface Java.
Il ne supporte pas les héritages multiples. Il supporte les héritages multiples.
Idéal pour la réutilisation de code et la perspective d'évolution. Idéal pour la déclaration de type.

Résumé des points sur la classe abstraite et l'interface en Java

La classe abstraite et l'interface sont utilisées pour l'abstraction; Cependant, ils ont leur juste part de différences. La principale différence entre les deux réside dans les méthodes d'abstraction. Tandis que le premier peut avoir ou non des méthodes abstraites, le dernier est implicitement abstrait. Une classe abstraite peut avoir des méthodes abstraites et non abstraites. Une interface, par contre, ne peut avoir que des méthodes abstraites. Par conséquent, elle ne peut pas avoir d’implémentation, ce qui signifie simplement qu’une interface ne peut pas avoir de méthodes non abstraites. Une classe abstraite ne peut pas être instanciée, ce qui interdit la création d'un objet. Une interface, en revanche, peut ressembler à une classe, mais ce n’est pas.