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

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

Qu’est-ce que cela construit, car nous ne pouvons pas instancier une classe abstract ?

Des pensées?

Un constructeur en Java ne crée pas réellement l’object, il est utilisé pour initialiser les champs.

Imaginez que votre classe abstraite ait les champs x et y, et que vous souhaitiez toujours les initialiser d’une certaine manière, quelle que soit la sous-classe concrète créée par la suite. Donc, vous créez un constructeur et initialisez ces champs.

Maintenant, si vous avez deux sous-classes différentes de votre classe abstraite, lorsque vous les instanciez, leurs constructeurs seront appelés, puis le constructeur parent sera appelé et les champs seront 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 appeler un constructeur spécifique sur la classe parente.

Toutes les classes incluant les classes abstraites peuvent avoir des constructeurs. Les constructeurs de classes abstraites seront appelés lorsque leur sous-classe concrète sera instanciée

Deux raisons à cela:

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

2) Nous soaps que les constructeurs sont également utilisés pour initialiser les champs d’une classe. Nous soaps également que les classes abstraites peuvent contenir des champs et qu’ils doivent parfois être initialisés en utilisant un constructeur .

Parce qu’une autre classe pourrait l’étendre et que la classe enfant a besoin d’appeler un constructeur de superclasse.

Parce que les classes abstraites ont un état (champs) et que parfois elles doivent être initialisées.

Je suppose que la racine de cette question est que les gens croient qu’un appel à un constructeur crée l’object. Ce n’est pas le cas. Java ne prétend nulle part qu’un appel de constructeur crée un object. Cela fait juste ce que nous voulons que le constructeur fasse, comme initialiser certains champs. C’est tout. Ainsi, le constructeur d’une classe abstraite appelée ne signifie pas que son object est créé.

En ce qui concerne l’implémentation, vous verrez souvent à l’intérieur de l’instruction super () dans les constructeurs de sous-classes, quelque chose comme:

public class A extends AbstractB{ public A(...){ super(Ssortingng constructorArgForB, ...); ... } }
public class A extends AbstractB{ public A(...){ super(Ssortingng constructorArgForB, ...); ... } }