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


Je comprends POURQUOI nous avons besoin d'une 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, la classe Child étend le parent. Ici, le parent peut très bien être abstrait et concret. Alors, pourquoi avons-nous de l'ABSTRAIT??

Author: Ashish K Agarwal, 2012-04-18

6 answers

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 davantage votre exemple de relation Parent/enfant pour inclure une classe Person, il serait logique que Person soit abstrait. 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 vous explicitement définissez et protégez l'idée de la classe abstraite. Lorsque vous déclarez une classe en tant qu'abstrait, vous ou quiconque utilisant votre code ne l'utilisez pas correctement 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. Mais ces concepts sont fournis pour aider à garder le code propre et bien organisé. La classe abstraite 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:

Diagramme UML de hiérarchie de forme

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

 49
Author: 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 différentes propriétés pour différents fruits comme est il pulpeux comme l'orange ou non par exemple la banane etc.

 6
Author: Nitin Chhajer, 2012-04-18 14:23:50

Je sais que c'est une vieille question mais il semble que l'affiche avait 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 que d'autres l'utilisent, il y a un avantage. Supposons par exemple que vous ayez écrit un framework de mise en cache mais que vous souhaitiez permettre aux clients de créer leurs propres classes d'implémentation de mise en cache. Vous souhaitez également garder une trace de certaines mesures, comme le nombre les caches sont ouverts, 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 de l'utiliser comme cache, ce qu'ils pourraient faire si la classe était concrète. Vous voulez également vous assurer qu'ils ne peuvent pas contourner votre journalisation de métriques, ce qu'ils seraient en mesure de faire si vous leur fournissiez simplement une interface de cache.

 4
Author: 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 puisse être testé et découplé, ce qui mène à l'objectif ultime de maintenabilité. Pour des raisons similaires, l'abstraction nous permet également de remplacer un peu de code sans effets secondaires ondulatoires.

 3
Author: 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 devrait 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
Author: 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érons cet exemple Java pour la classe Abstraite:

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

Classes de Béton 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 soit de la classe abstraite.

 0
Author: Devanshi, 2017-06-01 14:18:28