Différence entre classe abstraite et interface

Classe abstraite et interface

Classe abstraite (ou type) est un type de dans un système de types nominatif déclaré par le programme. Bien que le nom l'indique, une classe abstraite peut inclure ou non des méthodes ou propriétés abstraites. La classe de distinction fait référence à différentes constructions de langage pouvant être utilisées pour implémenter des types abstraits. Les classes abstraites peuvent être caractérisées par un problème de conception qui conserve la meilleure programmation orientée objet et par leur nature non finie..

Une interface est un type abstrait que les classes doivent implémenter pour spécifier une interface (en termes généraux). Les interfaces ne peuvent contenir que des signatures de méthodes et des déclarations de constante (statiques et finales), jamais de définitions de méthodes. Les interfaces simulent plusieurs héritages et sont utilisées pour coder des similitudes partagées entre différents types de classes..

Les types abstraits peuvent être créés, signifiés ou simulés de différentes manières. Un programmeur peut signifier des types abstraits en utilisant explicitement le mot-clé abstract, en incluant une ou plusieurs méthodes dans la définition de classe, en héritant d'un autre type abstrait sans redéfinir les caractéristiques manquantes nécessaires pour compléter la définition de la classe, ou en envoyant une méthode particulière à l'objet orienté langage de programmation connu comme cela qui ne met pas en œuvre la méthode directement.

Les interfaces peuvent être définies à l'aide de méthodes abstraites. Les classes peuvent également être implémentées dans des interfaces. Si une classe implémente une interface et n'implémente pas toutes ses méthodes, le signifiant abstract doit être utilisé, sinon ce signifiant n'est pas nécessaire (car toutes les interfaces sont intrinsèquement abstraites). Les classes peuvent également implémenter plusieurs interfaces.

Alors que les interfaces sont utilisées pour spécifier des interfaces génériques, les types abstraits peuvent être utilisés pour définir et appliquer un protocole (qui est un ensemble d'opérations que tous les objets implémentant le protocole souhaité doivent prendre en charge). Les types abstraits ne se produisent pas dans les langues sans sous-typage. En tant que tels, les sous-types sont obligés d'implémenter toutes les fonctionnalités nécessaires, assurant l'exactitude de l'exécution du programme. Les types abstraits peuvent être créés de plusieurs manières: les classes de base abstraites complètes sont des classes explicitement déclarées abstraites ou contenant des méthodes abstraites (non implémentées); Les systèmes d'objets Common Lisp incluent des mixines basées sur le système Flavors; Java, bien sûr; and Traits, qui agit comme une extension de Smalltalk.

Résumé:
1. Les classes abstraites (ou types) déclarent des programmes; les interfaces sont des types abstraits que toutes les classes doivent implémenter pour spécifier leur interface.
2. Les types abstraits peuvent être signifiés en utilisant le mot clé explicitement; les interfaces sont intrinsèquement abstraites, il n'est donc pas nécessaire de les signifier à l'aide du mot-clé (à moins qu'une classe spécifique implémente une interface mais n'implémente pas toutes ses méthodes).