90 votes

Quand dois-je utiliser les interfaces au lieu des classes abstraites ?

Je me demandais quand je devais utiliser les interfaces.

Réfléchissons à ce qui suit :

public abstract class Vehicle {
   abstract float getSpeed();
}

et :

public interface IVehicle {
  float getSpeed();
}

Je peux facilement mettre en œuvre les deux, ils ont la même fonctionnalité... MAIS je peux aussi ajouter quelques variables à ma classe de véhicule, qui devraient probablement être utilisées dans un véhicule (maxSpeed, carType...)

Quelle est la raison d'utiliser des interfaces ?

Merci !

EDITAR: J'ai trouvé un lien intéressant à ce sujet dans un autre fil de discussion : http://www.thecoldsun.com/en/content/01-2009/abstract-classes-and-interfaces

0voto

Will Jamieson Points 465

Les classes abstraites peuvent contenir des méthodes qui ne sont pas abstraites, alors que dans les interfaces, toutes vos méthodes sont abstraites et doivent être implémentées.

Il est préférable d'utiliser des interfaces lorsque vous savez que vous mettrez toujours en œuvre certaines méthodes. Vous pouvez également hériter de plusieurs interfaces, c'est la façon dont Java gère l'héritage multiple.

0voto

praveen tyagi Points 1

L'interface est essentiellement utilisée lorsque deux parties travaillent ensemble, et qu'une partie veut cacher quelque chose à l'autre (ou veut seulement montrer une partie de sa classe). Dans le cas de jdbc, les vendeurs de jdbc nous fournissent des interfaces parce qu'ils veulent tout nous cacher.

La classe abstraite n'est utilisée que dans le cas où nous voulons supporter un comportement commun dans plus d'une classe... ou si nous voulons fournir une implémentation préimplémentée avec des méthodes non implémentées (les méthodes doivent être abstraites). Par exemple, le servlet http dans l'interface servlet est une classe abstraite parce que cette classe implémente l'interface servlet à l'exception de sa méthode service... donc cette classe nous aide à obtenir une préimplémentation de la méthode de l'interface...

0voto

sridhar Points 1

En fait, les interfaces et les classes abstraites sont utilisées pour spécifier des contrats/règles qui montreront comment seront leurs sous-classes.

La plupart du temps, nous savons que l'interface est un pur abstrait, ce qui signifie que vous ne pouvez pas spécifier une seule méthode avec le corps. Ce point particulier est les avantages de la classe abstraite, ce qui signifie que dans la classe abstraite, vous avez le droit de spécifier la méthode avec le corps et sans le corps aussi bien.

Donc si vous voulez spécifier quelque chose à propos de votre sous-classe, alors vous pouvez choisir l'interface. Mais si vous voulez aussi spécifier quelque chose pour vos sous-classes et que vous voulez aussi que votre classe ait sa propre méthode, alors dans ce cas, vous pouvez choisir la classe abstraite.

0voto

kavi temre Points 1251

Vous ne pouvez pas réaliser l'héritage multiple avec une classe abstraite, c'est pourquoi Sun Microsystems fournit des interfaces.

Vous ne pouvez pas étendre deux classes mais vous pouvez implémenter plusieurs interfaces.

0voto

Raghu Points 205

Interface y Abstract Class sont les deux façons différentes de réaliser l'abstraction dans les langages de programmation opérationnelle.

L'interface fournit 100% abstraction, c'est-à-dire que toutes les méthodes sont abstraites.

La classe abstraite fournit 0 to 100% abstraction, c'est-à-dire qu'il peut avoir ou ne pas avoir de méthodes abstraites.

Nous pouvons utiliser Interface quand on veut que toutes les fonctionnalités d'un type soient implémentées par le client.

Nous pouvons utiliser Abstract Class lorsque certaines fonctionnalités communes peuvent être fournies par Abstract Class et le client aura la possibilité de mettre en œuvre ce dont il a réellement besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X