Qu'est-ce qu'une "classe abstraite" en Java?
java
oop
interface
abstract-class
Ravindra babu
la source
la source
Réponses:
Une classe abstraite est une classe qui ne peut pas être instanciée. Une classe abstraite est utilisée en créant une sous-classe héritée qui peut être instanciée. Une classe abstraite fait quelques choses pour la sous-classe héritée:
Voici un exemple:
Notez que "abstractMethod ()" n'a pas de corps de méthode. Pour cette raison, vous ne pouvez pas effectuer les opérations suivantes:
Il n'y a aucune méthode qui implémente
abstractMethod()
! Il n'y a donc aucun moyen pour la JVM de savoir ce qu'elle est censée faire lorsqu'elle obtient quelque chosenew ImplementingClass().abstractMethod()
.Voici une bonne réponse
ImplementingClass
.Notez que vous n'avez pas besoin de définir
implementedMethod()
oufinalMethod()
. Ils étaient déjà définis parAbstractClass
.Voici un autre correct
ImplementingClass
.Dans ce cas, vous avez remplacé
implementedMethod()
.Cependant, en raison du
final
mot - clé, ce qui suit n'est pas possible.Vous ne pouvez pas faire cela car l'implémentation de
finalMethod()
inAbstractClass
est marquée comme implémentation finale definalMethod()
: aucune autre implémentation ne sera autorisée, jamais.Maintenant, vous pouvez également implémenter une classe abstraite deux fois:
Maintenant, quelque part, vous pourriez écrire une autre méthode.
Notez que même si nous avons déclaré
b
unAbstractClass
type, il s'affiche"Overriden!"
. C'est parce que l'objet que nous avons instancié était en fait unImplementingClass
, dont ilimplementedMethod()
est bien sûr remplacé. (Vous avez peut-être vu ce phénomène sous le nom de polymorphisme.)Si nous souhaitons accéder à un membre spécifique à une sous-classe particulière, nous devons d'abord effectuer une descente dans cette sous-classe:
Enfin, vous ne pouvez pas effectuer les opérations suivantes:
Une seule classe peut être prolongée à la fois. Si vous devez étendre plusieurs classes, elles doivent être des interfaces. Tu peux le faire:
Voici un exemple d'interface:
C'est essentiellement la même chose que:
La seule différence est que la deuxième façon ne permet pas au compilateur de savoir qu'il s'agit en fait d'une interface. Cela peut être utile si vous voulez que les gens implémentent uniquement votre interface et aucune autre. Cependant, en règle générale, si votre classe abstraite n'a que des méthodes abstraites, vous devriez probablement en faire une interface.
Ce qui suit est illégal:
Vous ne pouvez pas implémenter de méthodes dans une interface. Cela signifie que si vous implémentez deux interfaces différentes, les différentes méthodes de ces interfaces ne peuvent pas entrer en collision. Comme toutes les méthodes d'une interface sont abstraites, vous devez implémenter la méthode, et puisque votre méthode est la seule implémentation dans l'arbre d'héritage, le compilateur sait qu'il doit utiliser votre méthode.
la source
c.implementedMethod()
imprimerait "Overriden!"?SecondImplementingClass
ne remplace pasimplementedMethod()
.Une classe Java devient abstraite dans les conditions suivantes:
1. Au moins une des méthodes est marquée comme abstraite:
Dans ce cas, le compilateur vous oblige à marquer toute la classe comme abstraite.
2. La classe est marquée comme abstraite:
Comme déjà dit: si vous avez une méthode abstraite, le compilateur vous oblige à marquer toute la classe comme abstraite. Mais même si vous n'avez pas de méthode abstraite, vous pouvez toujours marquer la classe comme abstraite.
Usage commun:
Une utilisation courante des classes abstraites est de fournir un aperçu d'une classe similaire à celle d'une interface. Mais contrairement à une interface, elle peut déjà fournir des fonctionnalités, c'est-à-dire que certaines parties de la classe sont implémentées et certaines parties sont simplement décrites avec une déclaration de méthode. ("abstrait")
Une classe abstraite ne peut pas être instanciée, mais vous pouvez créer une classe concrète basée sur une classe abstraite, qui peut ensuite être instanciée. Pour ce faire, vous devez hériter de la classe abstraite et remplacer les méthodes abstraites, c'est-à-dire les implémenter.
la source
abstract
mot - clé est tout ce qui est nécessaire pour qu'une classe soit abstraite. Mais une classe concrète ne peut pas contenir deabstract
méthode . Ainsi, si votre classe a uneabstract
méthode, elle doit être déclarée en tant queabstract
classe au compilateur.Une classe déclarée à l'aide du mot clé abstract est connue sous le nom de
abstract class
. L'abstraction est un processus consistant à masquer les détails d'implémentation des données et à n'afficher que les fonctionnalités pour l'utilisateur. L'abstraction vous permet de vous concentrer sur ce que fait l'objet au lieu de le faire.Principales choses de la classe abstraite
Une classe abstraite peut contenir ou non des méthodes abstraites. Il peut y avoir des méthodes non abstraites.
Une méthode abstraite est une méthode qui est déclarée sans implémentation (sans accolades et suivie d'un point-virgule), comme ceci:
ex:
abstract void moveTo(double deltaX, double deltaY);
Si une classe a au moins une méthode abstraite, alors cette classe doit être abstraite
Les classes abstraites ne peuvent pas être instanciées (vous n'êtes pas autorisé à créer un objet de classe abstraite)
Pour utiliser une classe abstraite, vous devez l'hériter d'une autre classe. Fournissez des implémentations à toutes les méthodes abstraites qu'il contient.
Si vous héritez d'une classe abstraite, vous devez fournir des implémentations à toutes les méthodes abstraites qu'elle contient.
Déclarez la classe abstraite La spécification du
abstract
mot-clé avant la classe lors de la déclaration le rend abstrait. Jetez un œil au code ci-dessous:Déclarer la méthode abstraite La spécification du
abstract
mot-clé avant la méthode lors de la déclaration la rend abstraite. Jetez un œil au code ci-dessous,Pourquoi nous avons besoin d'abstraire des classes
Dans une application de dessin orientée objet, vous pouvez dessiner des cercles, des rectangles, des lignes, des courbes de Bézier et de nombreux autres objets graphiques. Ces objets ont tous certains états (pour ex -: position, orientation, couleur de trait, couleur de remplissage) et des comportements (pour ex -: moveTo, rotation, redimensionnement, dessin) en commun. Certains de ces états et comportements sont les mêmes pour tous les objets graphiques (par exemple: couleur de remplissage, position et moveTo). D'autres nécessitent une implémentation différente (par exemple: redimensionner ou dessiner). Tous les objets graphiques doivent pouvoir se dessiner ou se redimensionner, ils diffèrent simplement par la façon dont ils le font.
C'est une situation parfaite pour une superclasse abstraite. Vous pouvez tirer parti des similitudes et déclarer tous les objets graphiques à hériter du même objet parent abstrait (par exemple:)
GraphicObject
comme indiqué dans la figure suivante.Tout d'abord, vous déclarez une classe abstraite
GraphicObject
, pour fournir des variables et des méthodes membres qui sont entièrement partagées par toutes les sous-classes, telles que la position actuelle et la méthode moveTo.GraphicObject
ont également déclaré des méthodes abstraites, telles que draw ou resize, qui doivent être implémentées par toutes les sous-classes mais doivent être implémentées de différentes manières. LaGraphicObject
classe peut ressembler à ceci:Utilisation de la méthode abstraite dans les sous-classes Chaque sous-classe non abstraite de
GraphicObject
, commeCircle
etRectangle
, doit fournir des implémentations pour les méthodesdraw
etresize
.Dans la
main
méthode, vous pouvez appeler toutes les méthodes comme ceci:Façons d'abstraction en Java
Il existe deux façons de réaliser l'abstraction en Java
Classe abstraite avec constructeurs, membres de données, méthodes, etc.
Production:
Rappelez-vous deux règles:
Si la classe a peu de méthodes abstraites et peu de méthodes concrètes, déclarez-la en tant que
abstract
classe.Si la classe n'a que des méthodes abstraites, déclarez-la en tant que
interface
.Références:
la source
C'est une classe qui ne peut pas être instanciée, et oblige les classes implémentées à implémenter éventuellement des méthodes abstraites qu'elle décrit.
la source
Pour parler simplement, vous pouvez considérer une classe abstraite comme une interface avec un peu plus de capacités.
Vous ne pouvez pas instancier une interface, qui vaut également pour une classe abstraite.
Sur votre interface, vous pouvez simplement définir les en-têtes de méthode et TOUS les implémenteurs sont obligés de les implémenter tous . Sur une classe abstraite, vous pouvez également définir vos en-têtes de méthode mais ici - à la différence de l'interface - vous pouvez également définir le corps (généralement une implémentation par défaut) de la méthode. De plus, lorsque d'autres classes étendent (notez, n'implémentez pas et que vous ne pouvez donc avoir qu'une seule classe abstraite par classe enfant) votre classe abstraite, elles ne sont pas obligées d'implémenter toutes vos méthodes de votre classe abstraite, sauf si vous avez spécifié une méthode abstraite ( dans ce cas, cela fonctionne comme pour les interfaces, vous ne pouvez pas définir le corps de la méthode).
Sinon, pour les méthodes normales d'une classe abstraite, les "héritiers" peuvent simplement utiliser le comportement par défaut ou le remplacer, comme d'habitude.
Exemple:
la source
Depuis la documentation d' Oracle
Méthodes et classes abstraites:
Une méthode abstraite est une méthode qui est déclarée sans implémentation (sans accolades et suivie d'un point-virgule), comme ceci:
Si une classe comprend des méthodes abstraites, alors la classe elle-même doit être déclarée abstraite, comme dans:
Lorsqu'une classe abstraite est sous-classée, la sous-classe fournit généralement des implémentations pour toutes les méthodes abstraites de sa classe parente. Si ce n'est pas le cas, la sous-classe doit également être déclarée abstraite .
Depuis
abstract classes
etinterfaces
sont liés, jetez un œil aux questions SE ci-dessous:Quelle est la différence entre une interface et une classe abstraite?
Comment aurais-je dû expliquer la différence entre une interface et une classe abstraite?
la source
Obtenez vos réponses ici:
Classe abstraite vs interface en Java
Une classe abstraite peut-elle avoir une méthode finale?
BTW - ce sont des questions que vous avez posées récemment. Pensez à une nouvelle question pour vous bâtir une réputation ...
Éditer:
Je viens de réaliser que les affiches de cette question et des questions référencées ont le même nom ou au moins un nom similaire, mais l'ID utilisateur est toujours différent. Donc, soit il y a un problème technique, keyur a des problèmes pour se reconnecter et trouver les réponses à ses questions, soit c'est une sorte de jeu pour divertir la communauté SO;)
la source
Petit ajout à tous ces messages.
la source
Une classe abstraite ne peut pas être directement instanciée, mais doit être dérivée de pour être utilisable. Une classe DOIT être abstraite si elle contient des méthodes abstraites: soit directement
ou indirectement
Cependant, une classe peut être abstraite sans contenir de méthodes abstraites. C'est un moyen d'empêcher l'instanciation directe, par exemple
Ce dernier style de classes abstraites peut être utilisé pour créer des classes "de type interface". Contrairement aux interfaces, une classe abstraite peut contenir des méthodes non abstraites et des variables d'instance. Vous pouvez l'utiliser pour fournir des fonctionnalités de base aux classes d'extension.
Un autre modèle fréquent consiste à implémenter la fonctionnalité principale dans la classe abstraite et à définir une partie de l'algorithme dans une méthode abstraite à implémenter par une classe d'extension. Exemple stupide:
la source
Solution - classe de base (résumé)
la source
Une classe abstraite est une classe déclarée abstraite - elle peut ou non inclure des méthodes abstraites. Les classes abstraites ne peuvent pas être instanciées, mais elles peuvent être sous-classées.
En d'autres termes, une classe déclarée avec un mot-clé abstrait est connue sous le nom de classe abstraite en java. Il peut avoir des méthodes abstraites (méthode sans corps) et non abstraites (méthode avec corps).
Remarque importante: - Les classes abstraites ne peuvent pas être utilisées pour instancier des objets, elles peuvent être utilisées pour créer des références d'objet, car l'approche Java du polymorphisme d'exécution est implémentée à l'aide de références de superclasse. Ainsi, il doit être possible de créer une référence à une classe abstraite afin qu'elle puisse être utilisée pour pointer vers un objet de sous-classe. Vous verrez cette fonctionnalité dans l'exemple ci-dessous
la source
Une classe abstraite est une classe qui n'est pas entièrement implémentée mais fournit quelque chose d'un modèle pour les sous-classes. Il peut être partiellement implémenté en ce qu'il contient des méthodes concrètes entièrement définies, mais il peut également contenir des méthodes abstraites. Ce sont des méthodes avec une signature mais pas de corps de méthode. Toute sous-classe doit définir un corps pour chaque méthode abstraite, sinon elle doit également être déclarée abstraite. Comme les classes abstraites ne peuvent pas être instanciées, elles doivent être étendues d'au moins une sous-classe pour être utilisées. Considérez la classe abstraite comme la classe générique, et les sous-classes sont là pour remplir les informations manquantes.
la source
Classe qui peut avoir à la fois des méthodes concrètes et non concrètes, c'est-à-dire avec et sans corps.
la source
Il ne fait rien, il suffit de fournir un modèle commun qui sera partagé pour sa sous-classe
la source