web-dev-qa-db-fra.com

pourquoi avons-nous besoin de classes abstraites en Java?

Pourquoi avons-nous besoin de classes abstraites en Java? Si vous n'allez jamais en faire un objet, pourquoi l'avoir en premier lieu? Comment l'utilisez-vous? Pourquoi est-il là? Je me demande la même chose avec les méthodes abstraites. Je trouve que cela ressemble à un concept similaire à celui d'avoir une super classe avec AUCUNE sous-classe qui pourrait jamais être importante.

17
user3314801

Une classe abstraite peut être utilisée comme type de modèle pour d'autres classes. La classe abstraite contiendra des fonctionnalités communes à toutes les classes qui l'étendent.

Par exemple:

Abstract Class Animal 

Tous les animaux se déplacent, respirent et se reproduisent afin de pouvoir les placer dans la classe animale.

Maintenant

 Concrete Class Dog, Cat etc.

Ces fonctions de base sont déjà fournies.

30
Scary Wombat

Les classes abstraites permettent de fournir un partiel ensemble d'implémentations par défaut des méthodes dans une classe. Comme ils sont incomplets, ils ne peuvent pas être instanciés et utilisés tels quels, mais ils peuvent être sous-classés pour ajouter les détails manquants d'une manière spécifique à ces implémentations particulières, et ces sous-classes peuvent être instanciées.

Sans classes abstraites, vous devrez fournir des implémentations factices des méthodes que vous avez l'intention de remplacer ... ce qui pourrait être fait, mais il y aurait alors le risque d'oublier d'implémenter l'une d'entre elles. Le fait que certaines méthodes restent entièrement abstraites garantit que les implémentations réelles doivent combler les lacunes, ou continuer à être elles-mêmes abstraites et forcer leurs descendants à le faire.

Ce n'est pas quelque chose dont la langue ne pourrait pas se passer. Mais c'est très utile. Vous découvrirez à quel point vous êtes utile lorsque vous devenez plus compétent dans la conception Java et OO.

(Notez que nous avons dit la même chose, fondamentalement, la dernière fois que vous avez soulevé cette question. Donc, si vous êtes toujours confus, vous voudrez peut-être être plus précis sur ce qui vous embrouille exactement.)

16
keshlam

Il existe de nombreuses utilisations des classes abstraites, le but principal des classes abstraites est de fonctionner comme des classes de base qui peuvent être étendues par des sous-classes pour créer une implémentation complète.

Par exemple,

Vous pouvez avoir trois étapes à mettre en œuvre dans votre programme,

  • Quelques étapes avant l'action
  • Quelques actions à effectuer
  • Quelques étapes après l'action

Donc, dans ce cas, vous pouvez définir une classe abstraite avec les trois méthodes comme ceci:

public abstract MyAbstractProcess {
    public void stepBefore() {
        //implementation directly in abstract superclass
    }

    public abstract void action(); // implemented by subclasses

    public void stepAfter() {
        //implementation directly in abstract superclass
    }
}

De plus, l'exemple ci-dessus de classe abstraite Animal est également un très bon exemple.

12
Harish Talanki