Pourquoi ne pouvons-nous pas instancier une classe abstraite en JAVA?
Je comprends:
- Depuis la classe Abstraite ne sont rien d'autre sur son propre dire de véhicule c'est pourquoi nous voulons créer un objet d'une mise en œuvre concrète de Voiture,de Moto, etc.
- Constructeur d'une classe Abstraite est appelée durant l'objet de chaînage.
- Nous ne pouvons les créer directement un objet de la classe Abstraite, même si elle contient un Constructeur et tous les moyens sont mis en œuvre
pourquoi ?
Je cherche à comprendre à partir de Compilateur point de vue, pourquoi Java forces de ces ?
Grâce
Si l'auteur avait voulu que vous soyez en mesure d'instancier, ils auraient pu les non-abstraite. Le fait qu'ils n'ont pas, même s'ils n'mettre en œuvre toutes les méthodes -- est un logiciel d'architecture choix; ils vous disent qu'ils ne croient pas à l'aide de l'implémentation par défaut de sens. Demandez-leur pourquoi, ou l'accepter et créer une sous-classe.
Ok..............
Vous ne pouvez pas le faire parce que l'auteur a marqué la classe comme
meilleure réponse stackoverflow.com/questions/13670991/...
Ok..............
Vous ne pouvez pas le faire parce que l'auteur a marqué la classe comme
abstract
, et c'est en partie le sens du mot dans le langage Java.meilleure réponse stackoverflow.com/questions/13670991/...
OriginalL'auteur sandejai | 2014-02-10
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas une limitation technique, plutôt (comme vous l'avez souligné) logique. Java (et beaucoup d'autres langues) de faire appliquer les différentes règles non pas parce qu'ils sont impossible à briser, mais parce que c'est intentionnel de la partie de la langue.
iser : Merci, je Suppose que c'est plus comme une règle, pourquoi c'est à cause de la conception, ce qui rend compilateur pour forcer l'erreur...
OriginalL'auteur Eli Iser
Une classe abstraite n'est pas complète! L'auteur l'a marqué abstrait pour vous dire que certains mise en œuvre est manquant dans le code. L'auteur a fait une partie du travail, mais vous devez remplir certains bits vous-même de le faire fonctionner. Le
abstract
mot-clé veille à ce qu'aucun on pourrait lancer accidentellement cette classe incomplète.Penser à la réparation d'une voiture. Quelqu'un a supprimé les plaquettes de frein et est en passe de remplacer dans les prochains jours. Maintenant, pour éviter que quelqu'un accidentellement de conduite de cette voiture(qui n'a pas de freins installé), le mécanicien installe une serrure sur le volant. C'est une mesure infaillible.
OriginalL'auteur kevin
rocketboy montre quelques mécaniste raisons, mais il y a un modèle conceptuel de la raison.
Une classe Abstraite représente un concept abstrait. Prenez votre véhicule exemple. Vous ne pouvez pas construire un véhicule qui n'est pas quelque chose de plus spécifique. Vous pouvez disposer d'un ensemble de véhicules, qui pourrait être faite de 2004 de la corolle et 98 ford escort et 1984 cs36 (une sorte de yacht), une marque 4 firefly classe de milieu de gamme le transport de vrac(celui avec les stabilisateurs), vous pouvez prendre l'un de ceux individuellement et de les appeler d'un véhicule, mais vous ne pouvez pas avoir quelque chose qui n'est qu'un véhicule, et pas un seul de ceux-ci ou de quelque autre type de véhicule.
Les classes abstraites représenter des concepts abstraits comme véhicule. D'où l'idée de l'instanciation est un non-sens, car effectivement l'instancier vous devez savoir ce que vous êtes de l'instanciation.
OriginalL'auteur Taylor
Si une classe est marquée avec le mot clé abstract puis il est appelé classe abstraite. Il ne peut PAS être instancié en utilisant l'opérateur new. Mais une classe abstraite peut être utilisé comme la super-classe de référence pour la sous-classe de l'objet
Une classe qui n'est PAS une classe abstraite est appelé de la classe de béton
Il ya tellement de nombreuses classes abstraites dans l'API Java et la plupart d'entre eux comprennent dans l'interface de la Bibliothèque et des Collections Cadre
Une classe abstraite doit être prolongé et une méthode abstraite doit être remplacée
Si une méthode est déclarée avec le mot clé abstract alors il ne devrait PAS avoir de corps. Seulement il peut avoir un nom, les paramètres et le type de retour, mais PAS le corps
Si vous avez un résumé de la méthode de la classe doit être déclarée comme abtracr ainsi dire un béton de classe ne peut PAS avoir des méthodes abstraites seulement une classe abstraite peut avoir des méthodes abstraites
Avec les méthodes abstraites une classe abstraite peut également les membres de l'instance, instance d'initialiseur, les constructeurs, les initialiseurs statiques et des membres statiques. Ici, les constructeurs et l'instance de l'initialiseur de la classe abstraite serait invoquée lorsque le sous-classe de la classe abstraite sera instancié et l'initialiseur statique de la classe abstraite sera invoquée lorsque la classe abstraite sera chargé par la JVM
Si un béton de classe s'étend une classe abstraite, ensuite, il faut remplacer toutes les méthodes abstraites de la super-classe abstraite, ce qui est appelé la mise en œuvre d'une classe abstraite
Pour la mise en œuvre partielle d'une classe abstraite on peut prendre une sous-classe abstraite qui peut prolonger le résumé de la superclasse. Dans cette situation, la sous-classe remplacer toutes les méthodes abstraites de la super-classe abstraite n'est PAS nécessaire. La mise en œuvre partielle d'une super-classe abstraite ou une interface peut uniquement être effectué par les classes abstraites. Un béton de classe ne peut PAS être utilisé pour la mise en œuvre partielle d'une classe abstraite parce que les classes de béton ne peut PAS avoir des méthodes abstraites
Les classes abstraites et les méthodes abstraites ne peut PAS être déclarée avec le mot clé final, c'est à dire une classe peut être abstraite, finale ou la finale de même, une méthode peut être résumé de la finale
Méthodes abstraites ne peut PAS être déclarée avec le mot clé private
Méthodes abstraites ne peut PAS être déclarée avec le mot-clé synchronized. Même s'il vous avez besoin d'un Thread-safe méthode, puis lors de la mise en œuvre de la classe abstraite (lorsque la méthode abstraite sera remplacée par le béton de sous-classe) la méthode de remplacement peuvent être marqués avec le mot-clé synchronized
Méthodes abstraites ne peuvent PAS être marqués avec le mot-clé static. Parce que les méthodes statiques ne peuvent PAS être modifiée seulement ils peuvent être masqués par la sous-classe des méthodes statiques
Méthode abstraite ne peut PAS être marqués avec le mot-clé native
Méthode abstraite ne peut PAS être marqués avec le mot-clé strictfp
De sorte que vous seul pouvez utiliser le modificateur d'accès (autres que privées), le type de paramètre à une méthode abstraite
Un béton de classe ne peut PAS avoir des méthodes d'instance, mais une classe abstraite peut avoir des méthodes abstraites, les membres statiques, les membres de l'instance, les initialiseurs statiques, des constructeurs et de l'instance de l'initialiseur
Si un résumé de classe implémente une interface, ou qui s'étend d'une autre classe abstraite, alors il n'est PAS nécessaire qu'il doit remplacer toutes les méthodes abstraites de l'interface. Mais ce n'est PAS la même qu'avec les classes concrètes
Il peut également arriver qu'une classe abstraite n'ont PAS toutes les méthodes abstraites
Un résumé classs ne peut PAS être instancié en utilisant l'opérateur new. Parce qu'un résumé peut avoir des méthodes abstraites comme les méthodes sans corps (ou mise en œuvre). Car un objet ne peut PAS avoir un résumé des méthodes et de la JVM NE peut allouer de la mémoire de l'méthodes abstraites
OriginalL'auteur alexvipul
Car une Classe Abstraite est une structure du squelette(incomplète construire si vous pouvez), d'où le terme Abstrait.
Signifie que chaque
Person
doit parler. Cela signifie que chaque personne devrait savoir parler (mettre en œuvre lesspeak()
).new Person()
ne peut pas avoir que, donc, il n'est pas permis.Oui, il ne le fait pas. Était juste de l'utiliser à démontrer.
L'OP est explicitement demandé au sujet d'une classe abstraite sans une méthode abstraite ("même si elle contient un Constructeur et tous les moyens sont mis en œuvre")
OriginalL'auteur rocketboy
Vous ne pouvez pas instancier une interface ou une classe abstraite parce qu'elle défie le modèle orienté objet. Lire plus
OriginalL'auteur Sunil S
Ce que je comprends que les classes Abstraites peuvent contenir abstrait (vide, sans la mise en œuvre des méthodes. Si nous créons une instance d'un objet et l'appel de la méthode vide, Il ne va pas au travail et peut causer des problèmes, donc compilateur forces de cette RÈGLE.
plus-sighter ?
OriginalL'auteur sandejai
abstraction de l'auto dit : existant dans la pensée ou une idée mais n'ayant pas de physique ou de l'existence concrète.
En java, terme , mot clé abstract définition , si abstrait vient avant le nom d'une classe, puis JDK raconte à la JVM sur supprimer cet objet de classe d'initiation.
C'est correct, classe abstraite peut avoir de multiples constructeur, mais seulement pour le constructeur de chaînage.
OriginalL'auteur Rudra
Une classe Abstraite est une classe qui est déclarée abstraite. Il peut ou peut ne pas inclure les méthodes abstraites.
Nous devons déclarer une classe Abstraite et méthodes Abstraites avec le mot-clé abstract.
Les classes abstraites ne peut pas être instanciée, on ne peut pas créer un objet de la classe Abstraite. Nous pouvons créer des sous-classes pour les classes Abstraites.
Une classe Abstraite peut ou peut ne pas avoir des méthodes abstraites, méthode abstraite dans le sens d'une méthode déclarée sans corps de la mise en œuvre est appelée méthode abstraite. Donc, dans ce cas JVM ne sais pas de combien de mémoire il a d'allouer pour la méthode abstraite parce que la méthode abstraite n'a pas de corps de la mise en œuvre. Si la JVM ne sera pas en mesure d'allouer de la mémoire pour les méthodes abstraites quand le temps de la création de l'instance de la classe Abstraite. Donc JVM incapable de créer une instance de la classe Abstraite. De sorte que l'on ne peut créer un objet de la classe Abstraite.
Il est également possible que nous pouvons créer une classe Abstraite avec toutes les méthodes concrètes, c'est à dire sans les méthodes abstraites. Dans ce cas également, nous ne pouvons pas créer une instance de la classe Abstraite. Pourquoi, parce que le mot clé abstract indique simplement à la JVM que la classe ne peut pas être instanciée.
Les concepteurs de Java fait la JVM que lorsqu'il trouver mot clé abstract pour toute la classe, puis de la JVM ne peut pas créer une instance de cette classe.
OriginalL'auteur Sumedh Tambat
Vous ne pouvez pas instancier une classe abstraite parce que c'est juste pour donner une structure de votre classe qui est de l'étendre.
Et si vous voulez lancer votre classe, alors pourquoi vous voulez définir comme résumé?
OriginalL'auteur Ankita P.
raison très simple jvm jouer pour nous restreindre à instancier une classe abstraite et de l'interface.
Assumer compilateur nous permettre d'instancier les deux ok.
Supposons donc que ma classe abstraite contient 5 méthode abstraite signifie seulement prototype de méthode aucun corps de la méthode.
De sorte que nous savons que chaque appel de la méthode de création d'une pile séparée dans la jvm Java pile
Que l'allocation de mémoire qui s'est passé en fonction de la méthode de la structure
et après l'exécution de cette pile est en train de détruire la droite.
Donc si ma méthode n'est pas contient tout le corps signifie comment peut-jvm prédire mémoire à allouer à cette méthode
Deuxième si aucun organe ne signifie pas l'exécution de la méthode, donc jamais il va détruire à partir de votre Java pile il y a peut être une chance de u peut obtenir memoryout erreur.
Afin de tenir compte de ces 2 cas, le compilateur nous restreindre à instancier à la fois de l'interface et la classe abstraite
OriginalL'auteur naila naseem
Parce que Java restreint, c'est pourquoi nous ne pouvons pas instancié de la classe abstraite. Parce qu'en général, le scénario abstrait signifie incomplète si nous ne pouvons pas faire l'objet de la incomplètes choses.Nous devons fournir la mise en oeuvre complète d'une classe abstraite dans une classe concrète. Mais nous ne pouvons pas faire l'objet d'une classe abstraite.
Les constructeurs privés sont utilisés dans Singleton classes de manière à éviter la création d'objet à partir ailleurs
OriginalL'auteur Bharti Rawat
Car une classe abstraite est une classe incomplète (incomplet dans le sens où elle contient des méthodes abstraites sans corps et de sortie), on ne peut créer une instance ou d'un objet; de la même manière que vous dites d'une interface.
OriginalL'auteur Sonu patel
Vous POUVEZ instancier une classe abstraite. Vous avez seulement besoin de fournir un béton sous-classe.
OriginalL'auteur Srinath Shah
Bien fait vous pouvez - mais seulement si vous mettez en œuvre les méthodes qui ont été déclarées abstraites ou à gauche.
Ajouté
La
IA
classe instancie un objet de laI
classe abstraite et met en œuvre lanext
méthode qui était absent de laI
classe. Vous créez en fait un objet d'un anonyme qui implémente l'implicite de la méthode abstraite.Je ne vois pas en quoi cela n'a rien à voir avec ce que l'OP est de poser des questions, ou si elle est l'instanciation d'une classe abstraite (depuis, vous ne pouvez pas le faire)
OriginalL'auteur OldCurmudgeon
La raison pour laquelle Java ne permet à une classe abstraite pour être instancié est logique. Nous n'avons pas donné la définition d'une méthode et donc, si elle avait allowd la création de l'objet, il n'y avait pas d'adresse de retour à la pop la fonction à partir de la pile, et nous obtenons ainsi, coincé. Ainsi, il est logique de ne pas autoriser l'objet instattion.
OriginalL'auteur user1345619