Dans une sous-classe, nous pouvons initialiser les membres de données à l'aide du constructeur de la sous-classe, qui appelle en interne le constructeur de la super-classe super()
. Si une sous-classe ne peut pas hériter des constructeurs de sa superclasse, comment l'appel super()
peut-il initialiser la superclasse?
Un constructeur d'une sous-classe peut appeler des constructeurs de la superclasse, mais ils ne sont pas hérités en tant que tels.
Pour être clair, cela signifie que si vous avez quelque chose comme:
public class Super
{
public Super(int x)
{
}
}
public class Sub extends Super
{
public Sub()
{
super(5);
}
}
alors vous ne pouvez pas écrire:
new Sub(10);
car il n'y a pas de constructeur Sub(int)
.
Il peut être utile de considérer les constructeurs comme des méthodes statiques non héritées avec un paramètre implicite de l'objet en cours d'initialisation.
A partir de Spécification de langage Java, section 8.8 :
Les déclarations de constructeur ne sont pas membres. Ils ne sont jamais hérités et ne sont donc pas soumis à la dissimulation ou à la domination.
Non, une sous-classe ne peut hériter des constructeurs de sa super-classe.
Les constructeurs sont des membres de fonctions spéciales d'une classe en ce sens qu'ils ne sont pas hérités par la sous-classe. Les constructeurs sont utilisés pour donner un état valide à un objet lors de sa création.
Une des raisons principales est que vous ne voulez probablement pas écraser le constructeur des superclasses, ce qui serait possible si elles étaient héritées. En donnant au développeur la possibilité de remplacer un constructeur de superclasses, vous éroderiez les capacités d'encapsulation du langage.
Voir aussi: Les constructeurs ne sont jamais hérités
super
est un mot clé Java pour désigner la superclasse, et super()
est le moyen d'appeler le constructeur de votre superclasse. Le constructeur n'est pas hérité mais vous pouvez toujours l'appeler.
Tout d'abord, les constructeurs ne sont pas membres de classes et seuls les membres sont hérités.
Deuxièmement, nous pouvons imaginer des cas pour lesquels nous ne voulons pas que les sous-classes aient les mêmes constructeurs que la classe parente.
Imaginez un véhicule de classe abstraite avec un véhicule de constructeur (roues intérieures) et un vélo de sous-classe.
Par définition, une bicyclette a 2 roues donc on peut imaginer que le constructeur de la bicyclette appellera super (2) et n'est-il pas préférable dans ce cas que la bicyclette n'expose pas un constructeur?
Non. Pas du tout jamais ... Une sous-classe n'hérite pas de son constructeur Superclass ... au lieu de l'appeler, elle peut appeler son constructeur Superclass à l'aide du mot clé "super ()" ...