En quoi la classe abstraite est-elle différente de la classe concrète?

Je comprends pourquoi nous avons besoin de classe abstraite en Java-pour créer des sous-classes. Mais la même chose peut être réalisée par la classe concrète. par exemple, classe enfant étend Parent. Ici Parent peut très bien être abstrait et concret. Alors, pourquoi avons-nous de l'ABSTRAIT??

21
demandé sur Ashish K Agarwal 2012-04-18 18:17:42

6 réponses

Les classes abstraites ne peuvent pas être instanciées directement. Déclarer une classe comme abstraite signifie que vous ne voulez pas qu'elle soit instanciée et que la classe ne peut être héritée. Vous imposez une règle dans votre code.

Si vous étendez votre exemple de relation Parent/enfant pour inclure une classe Person, il serait logique que Person soit abstraite. Le Parent est une idée concrète et l'enfant aussi. La personne est un concept abstrait dans la réalité ainsi que dans le code.

Un avantage est-ce que vousexplicitement définissez et protégez l'idée de la classe abstraite. Lorsque vous déclarez une classe comme un résumé, il n'y a aucun moyen que vous ou quiconque utilisant votre code l'utilisiez incorrectement en l'instanciant. Ce raisonnement est similaire à la raison pour laquelle nous spécifions des fonctions et des champs comme publics, privés ou protégés. Si vous déclarez une fonction ou un membre comme privé, vous le protégez en effet contre un accès inapproprié à partir du code client. Les soldats sont destinés à être utilisés dans la classe et c'est tout. Les classes abstraites sont destinées à être héritées et c'est tout.

Maintenant, devez-vous utiliser des classes abstraites et définir des fonctions et des champs comme privés au lieu de publics? Non, vous ne le faites pas. Mais ces concepts sont fournis pour aider à garder le code propre et bien organisé. La classe abstract est implémentée dans tous les langages orientés objet à ma connaissance. Si vous regardez autour de vous, vous verrez que C++, C#, VB.NET etc. tous utilisent ce concept.

Un meilleur, spécifique exemple:

Hiérarchie des formes diagramme UML

Dans l'exemple ci-dessus, la classe Shape doit être abstraite car elle n'est pas utile en elle-même.

49
répondu Paul Sasik 2012-04-18 14:52:58

La classe abstraite signifie qu'elle n'est pas complète. Il a besoin d'une autre classe pour le compléter et/ou ses fonctionnalités. Vous avez besoin d'étendre la classe abstraite. Il sera utile avec certaines classes par exemple. Fruits tous les fruits ont la même propriété que la couleur. Mais vous pouvez avoir des propriétés différentes pour différents fruits comme est-il pulpeux comme l'orange ou non, par exemple la banane, etc.

6
répondu Nitin Chhajer 2012-04-18 14:23:50

Je sais que c'est une vieille question, mais il semble que l'affiche ait encore quelques questions sur l'avantage d'utiliser une classe abstraite.

Si vous êtes le seul à utiliser votre code, il n'y a vraiment aucun avantage. Cependant, si vous écrivez du code pour d'autres à utiliser, il y a un avantage. Disons par exemple que vous avez écrit un framework de mise en cache mais que vous voulez permettre aux clients de créer leurs propres classes d'implémentation de mise en cache. Vous voulez également garder une trace de certaines mesures, comme combien les caches sont ouvertes, hypothétiquement. Votre classe abstraite pourrait ressembler à ceci:

public abstract class AbstractCache {
    public final void open() {
        ... // Do something here to log your metrics
        openImpl();
    }

    protected abstract void openImpl() { }
}

En soi, la classe AbstractCache est inutile et vous ne voulez pas que les clients essaient d'en instancier un et l'utilisent comme cache, ce qu'ils seraient capables de faire si la classe était concrète. Vous voulez également vous assurer qu'ils ne peuvent pas contourner la journalisation de votre métrique, ce qu'ils seraient en mesure de faire si vous leur avez simplement fourni une interface de Cache.

4
répondu Mike B 2014-03-03 20:37:17

Le point d'abstraction n'est pas de créer des sous-classes. Il s'agit plus de créer des coutures dans votre code. Vous voulez que le code soit capable de tester et découplé, ce qui conduit à l'objectif ultime de la maintenabilité. Pour des raisons similaires, l'abstraction nous permet également de remplacer un peu de code sans effets secondaires ondulants.

3
répondu P.Brian.Mackey 2012-04-18 14:25:54

Une classe abstraite est destinée à être utilisée comme classe de base à partir de laquelle les autres classes sont dérivées. La classe dérivée est censée fournir des implémentations pour les méthodes qui ne sont pas implémentées dans la classe de base. Une classe dérivée qui implémente toutes les fonctionnalités manquantes est appelée une classe concrète

3
répondu Hardik Chudasama 2016-07-22 05:38:42

Selon ma compréhension

Classe Abstraite est une classe qui décrit simplement le comportement, mais ne pas la mettre en œuvre. Considérez cet exemple Java pour la classe abstraite:

public interface DoSomething(){
public void turnOnTheLight(); 
}

classes concrètes sont ceux qui doivent être mis en œuvre. Par Exemple:

    public abstract class A(){
        public void doIt(); 
    } 
    public class B extends A(){
        public void doIt(){ 
        //concrete method
        System.out.println(“I am a Concrete Class Test”); 
    }
 }

En d'autres termes, une classe concrète en java est une telle classe qui a l'implémentation de tous ses membres hérités soit de l'interface ou de la classe abstraite.

0
répondu Devanshi 2017-06-01 14:18:28