Différence entre la classe abstraite et l'interface dans Java

Différence entre la classe abstraite et l'interface dans Java

La classe et l'interface abstraites sont principalement utilisées pour l'abstraction, mais elles sont très différentes les unes des autres. Les deux font la base de Java mais ont leurs propres utilisations d'application. Bien que les deux termes puissent être synonymes les uns avec les autres, ils ne peuvent pas être utilisés de manière interchangeable.

Il existe des différences significatives entre les deux. Bien qu'une méthode d'interface soit 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éthode et ils peuvent avoir des méthodes statiques et par défaut en Java. Étudions la différence entre les deux en détail.

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

Une classe abstraite en Java est une classe déclarée abstraite - elle peut contenir ou non des méthodes abstraites. Il est assez similaire à une interface Java, sauf qu'il peut contenir l'implémentation de la méthode par défaut. Comme dans la programmation orientée objet, l'abstraction en Java est réalisée en utilisant des classes abstraites et des interfaces. En Java, l'abstraction signifie masquer les détails non pertinents de l'utilisateur pour se concentrer uniquement sur les détails essentiels pour augmenter l'efficacité, ce qui réduit la complexité. Le mot clé «Résumé» est utilisé pour créer une classe abstraite juste avant le mot-clé de classe 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. Cependant, 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é, selon le niveau de visibilité. Une classe abstraite ne peut pas être instanciée et elle ne fournit pas une abstraction à 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, ce n'est pas. Parce que Java ne prend pas en charge plusieurs héritages, une interface est parfois idéale pour fournir une base pour la hiérarchie des classes. Une interface est davantage un plan d'un classe qui est également utilisé pour atteindre l'abstraction en Java. Il contient des méthodes abstraites et des constantes statiques. En termes simples, une interface est une collection de méthodes abstraites utilisées pour spécifier un comportement que la classe doit implémenter. Contrairement à la classe abstraite, une interface fournit une abstraction complète en Java. Il peut avoir à la fois des méthodes et des variables comme une classe, mais les méthodes déclarées dans l'interface sont abstraites par défaut.

Différence entre la classe abstraite et l'interface dans Java

  1. «Héritage multiple» de la classe abstraite et de l'interface en Java - Malgré le fait que la classe abstraite et l'interface sont principalement utilisées pour l'abstraction, elles sont très différentes les unes des autres. Alors qu'une classe abstraite est une classe, une interface est une interface. Cela signifie que si une interface ne peut étendre qu'une autre interface Java, une classe abstraite peut implémenter plusieurs héritages en Java. Eh bien, Java ne prend pas en charge plusieurs héritages, mais on peut implémenter plusieurs héritages en Java.
  2. «Type de méthode» de la classe et de l'interface abstraites 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 public, privé et protégé, mais les méthodes d'une interface sont implicitement publiques et abstraites. Vous ne pouvez utiliser aucun autre modificateur d'accès avec des méthodes d'interface '.
  4. «Implémentation» de la classe abstraite et de l'interface en Java - Une classe abstraite peut fournir la mise en œuvre d'une interface. Une interface, en revanche, ne peut pas fournir la mise en œuvre d'une classe abstraite.
  5. «Mot-clé» de la classe et de l'interface abstraites en java- Bien que le mot-clé «abstrait» soit utilisé pour déclarer une méthode de classe abstraite comme abstrait, cependant, les interfaces sont entièrement une histoire différente; Ils ne peuvent avoir que des constantes finales publiques et statiques 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 le 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 est que le premier est un peu plus rapide que le second car une recherche est généralement impliquée dans une interface avant qu'une méthode remplacée ne soit appelée dans 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, tandis qu'une classe abstraite peut contenir ou non des variables non finales.

Abstract Class Vs Interface en Java: Table de comparaison

Classe abstraite Interface
Un mot-clé abstrait est utilisé pour créer une classe abstraite et il peut être utilisé avec des méthodes. Le mot-clé d'interface est utilisé pour créer une interface mais il ne peut pas être utilisé avec des méthodes.
Une classe ne peut prolonger qu'une seule 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 la mise en œuvre d'une interface. Une interface ne peut pas fournir la mise en œuvre d'une classe abstraite.
Il peut avoir des méthodes avec des implémentations. Il fournit une abstraction absolue et ne peut pas avoir d'implémentations de méthode.
Il peut avoir des modificateurs d'accès publics, privés, statiques et protégés. Les méthodes sont implicitement publiques et abstraites dans l'interface Java.
Il ne prend pas en charge plusieurs héritages. Il prend en charge plusieurs héritages.
Il est idéal pour la réutilisation du code et l'évolution de la perspective. Il est idéal pour la déclaration de type.

Points de résumé sur la classe et l'interface abstraites 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 est entraînée par des méthodes d'abstraction. Bien que le premier puisse ou non avoir des méthodes abstraites, la seconde est implicitement abstraite. Une classe abstraite peut avoir des méthodes abstraites et non abstraites. Une interface, en revanche, ne peut avoir que des méthodes abstraites, ils ne peuvent donc 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 qui interdit la création d'un objet. Une interface, en revanche, peut ressembler à une classe, mais ce n'est pas.