Interface VS classe abstraite

Programmation Avancée

Modérateur : douinj

tassy_f
Messages : 7
Inscription : 24 nov. 2019 21:22

Interface VS classe abstraite

Message par tassy_f » 13 janv. 2020 0:57

Bonjour,

A l'occasion du TP injection, je suis repassé à travers pas mal de patrons, et une questions tout bête m'est venue:
qu'elle est exactement la différence entre une interface et une classe abstraite?
Parfois, on peut utiliser l'une ou l'autre indifféremment. Mais dans d'autres cas, notamment dans les patrons, elles sont généralement précisées.

Pourquoi?

Qu'est-ce qu'une interface fait qu'une classe abstraite ne peut pas faire?
Qu'est-ce qu'une classe abstraite fait qu'une interface ne peut pas faire?

Quand utiliser l'une ou l'autre, et quand les éviter?

Merci d'avance!

douinj
Messages : 159
Inscription : 18 mars 2009 15:46

Re: Interface VS classe abstraite

Message par douinj » 13 janv. 2020 12:21

Bonjour,

La classe abstraite ou incomplète s'inscrit dans un graphe d'héritage, elle peut contenir du code (cf. le paton TemplateMethod) des attributs, c'est une classe comme toutes les autres mais avec la possibilité de laisser à "d'autres" le soin de la compléter (le savoir faire faire)

L'interface se comporte comme la signature d'une classe, ce qu'une classe doit implémenter, sans code, sans attribut, juste des signatures ( de méthodes ou de constantes)

en Interne ce sont des références que l'on manipule, dans les deux cas, le compilateur vérifie le bon usage

Code : Tout sélectionner

  AbstractClassName c = new ConcreteClass();  // ConcreteClass extends AbstractClassName 
  InterfaceName i = new ConcreteClass();        // ConcreteClass implements InterfaceName  ( au moins)
Bonne préparation

const_j8
Messages : 6
Inscription : 24 nov. 2019 2:59

Re: Interface VS classe abstraite

Message par const_j8 » 13 janv. 2020 20:02

Bonsoir,

Pour aller plus loin, on peut dire que l'interface est un "Contrat" que doit respecter la classe qui l'implémente (le respect des signatures comme mentionné par Mr DOUIN).

Il y a également une différence notable entre une classe abstraite et une interface :
- Une classe ne peut hériter que d'une seule classe abstraite.
- Une classe peut implémenter plusieurs interfaces.

Bonne journée.

Cordialement,

Jonathan CONSTANTIN

Répondre