Maison > Java > javaDidacticiel > le corps du texte

Quand utiliser une classe abstraite et quand utiliser une interface en Java ?

WBOY
Libérer: 2023-08-21 08:17:09
avant
1942 Les gens l'ont consulté

Quand utiliser une classe abstraite et quand utiliser une interface en Java ?

Les interfaces peuvent être utilisées pour définir des contrats comportementaux et servir également de contrats d'interaction entre deux systèmes, tandis que les classes abstraites sont principalement utilisées pour définir les comportements par défaut des sous-classes, ce qui signifie que toutes les sous-classes doivent exécuter la même fonction.

Quand utiliser la classe abstraite

  • Si nous utilisons le concept d'héritage, la classe abstraite est un bon choix car elle fournit une implémentation de classe de base commune pour les classes dérivées.
  • Si nous souhaitons déclarer des membres non publics, les classes abstraites sont également un bon choix. Dans une interface, toutes les méthodes doivent être publiques.
  • Si nous souhaitons ajouter de nouvelles méthodes à l'avenir, les classes abstraites sont un meilleur choix. Car si l’on ajoute une nouvelle méthode à une interface, toutes les classes qui implémentent déjà l’interface doivent être modifiées pour implémenter la nouvelle méthode.
  • Si nous souhaitons créer plusieurs versions de notre composant, nous pouvons créer une classe abstraite. Les classes abstraites offrent un moyen facile à utiliser de versionner les composants. En mettant à jour la classe de base, toutes les classes héritées sont automatiquement mises à jour. Une fois l'interface créée, elle ne peut plus être modifiée. Si une nouvelle version d'une interface est requise, une toute nouvelle interface doit être créée.
  • Les classes abstraites ont une meilleure compatibilité ascendante. Une fois qu'un client utilise une interface, nous ne pouvons pas la modifier ; s'il utilise une classe abstraite, nous pouvons toujours ajouter un comportement sans casser le code existant.
  • Si nous souhaitons fournir des fonctionnalités implémentées communes à toutes les implémentations de notre composant, nous pouvons utiliser des classes abstraites. Les classes abstraites nous permettent d'implémenter partiellement la classe, alors que les interfaces ne contiennent l'implémentation d'aucun membre.

Exemple

abstract class Car {
   public void accelerate() {
      System.out.println("Do something to accelerate");
   }
   public void applyBrakes() {
      System.out.println("Do something to apply brakes");
   }
   public abstract void changeGears();
}
Copier après la connexion

Maintenant, toute voiture que vous souhaitez instancier doit implémenter la méthode changeGears().

class Alto extends Car {
   public void changeGears() {
      System.out.println("Implement changeGears() method for Alto Car");
   }
}
class Santro extends Car {
   public void changeGears() {
      System.out.println("Implement changeGears() method for Santro Car");
   }
}
Copier après la connexion

Quand utiliser les interfaces

  • Si la fonctionnalité que nous créons sera utilisée sur des objets très différents, utilisez des interfaces. Les classes abstraites sont principalement utilisées pour des objets étroitement liés, tandis que les interfaces sont mieux adaptées pour fournir des fonctionnalités communes à des classes non liées.
  • Les interfaces sont un bon choix si nous pensons que l'API ne changera pas au fil du temps.
  • Si nous voulons des fonctionnalités similaires à l'héritage multiple, les interfaces sont également un bon choix car nous pouvons implémenter plusieurs interfaces.
  • Si nous concevons un module fonctionnel petit et concis, utilisez des interfaces. Si nous concevons une grande unité fonctionnelle, utilisez des classes abstraites.

Exemple

public interface Actor {
   void perform();
}
public interface Producer {
   void invest();
}
Copier après la connexion

De nos jours, la plupart des acteurs sont assez riches pour faire leurs propres films. Si nous utilisons des interfaces au lieu de classes abstraites, nous pouvons implémenter à la fois Actor et Producer. De plus, nous pouvons également définir une nouvelle interface ActorProducer, qui hérite des deux.

public interface ActorProducer extends Actor, Producer{
   // some statements
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal