Pourquoi les classes abstraites en Java ont-elles des constructeurs? [dupliquer]

cette question a déjà une réponse ici:

pourquoi une classe abstract en Java a-t-elle un constructor ?

qu'est-ce qu'il construit, car nous ne pouvons pas instancier une classe abstract ?

une idée?

55
demandé sur N J 2010-01-31 06:56:23

7 réponses

un constructeur en Java ne" construit " pas réellement l'objet, il est utilisé pour initialiser les champs.

Imaginez que votre classe abstraite comporte des champs x et y, et que vous voulez toujours qu'ils soient initialisés d'une certaine manière, quelle que soit la sous-classe concrète qui soit éventuellement créée. Donc vous créez un constructeur et initialisez ces champs.

maintenant, si vous avez deux sous-classes différentes de votre classe abstraite, constructeurs sera appelé, puis le constructeur parent sera appelée, et les champs sont initialisés.

si vous ne faites rien, le constructeur par défaut du parent sera appelé. Cependant, vous pouvez utiliser le mot-clé super pour invoquer un constructeur spécifique sur la classe parent.

76
répondu Uri 2010-01-31 04:02:01

Toutes les classes, y compris les classes abstraites peuvent avoir des constructeurs.Résumé des constructeurs de classe sera appelée lorsque le béton sous-classe sera instanciée

10
répondu Upul Bandara 2010-01-31 04:01:29

deux raisons à cela:

1) Les classes abstraites ont constructors et ces constructeurs sont toujours invoqués lorsqu'une sous-classe concrète est instanciée. Nous savons que lorsque nous allons instancier une classe, nous utilisons toujours le constructeur de cette classe. Maintenant, chaque constructeur invoque le constructeur de sa classe super avec un appel implicite à super() .

2) nous savons que le constructeur est également utilisé pour initialiser les champs d'une classe. Nous savons aussi que les classes abstraites peuvent contenir des champs et qu'elles doivent parfois être initialisées en quelque sorte en utilisant le constructeur .

9
répondu Debmalya 2012-06-25 14:36:22

parce qu'une autre classe pourrait l'étendre, et la classe enfant doit invoquer un constructeur de superclasses.

7
répondu Richard JP Le Guen 2010-01-31 04:14:35

parce que les classes abstraites ont un état (des champs) et quelque chose qu'elles doivent être initialisées d'une façon ou d'une autre.

4
répondu Andriy Sholokh 2010-01-31 13:36:28

je suppose que la racine de cette question Est que les gens croient qu'un appel à un constructeur crée l'objet. Ce n'est pas le cas. Java ne prétend nulle part qu'un appel de constructeur crée un objet. Il fait juste ce que nous voulons que le constructeur fasse, comme initialiser certains champs..c'est tout. Ainsi, le fait qu'un constructeur de classe abstraite soit appelé ne signifie pas que son objet est créé.

2
répondu Mandroid 2013-06-02 07:18:09

de mise en Œuvre de sage, vous verrez souvent à l'intérieur d'instruction super() dans les sous-classes des constructeurs, quelque chose comme:


public class A extends AbstractB{

  public A(...){
     super(String constructorArgForB, ...);
     ...
  }
}


1
répondu manuel aldana 2010-01-31 10:21:26