Erreur implicite du super constructeur dans le constructeur Java par défaut
En Java, les constructeurs par défaut sont automatiquement fournis par le compilateur pour les classes qui ne définissent pas explicitement tous les constructeurs. Cependant, lorsqu'une classe de base définit un constructeur, le compilateur ne générera plus implicitement un constructeur par défaut pour ses sous-classes. Cela peut entraîner une erreur « Le super constructeur implicite n'est pas défini pour le constructeur par défaut ».
Exemple :
Considérez ce code :
abstract public class BaseClass { String someString; public BaseClass(String someString) { this.someString = someString; } abstract public String getName(); } public class ACSubClass extends BaseClass { public ASubClass() { // default constructor // super(someString); // error: super() must be invoked in subclasses } public String getName() { return "name value for ASubClass"; } }
Ici, ACSubClass n'a pas de constructeur explicite. Au lieu de cela, il s'appuie sur le constructeur par défaut fourni par le compilateur. Cependant, puisque BaseClass définit un constructeur, aucun constructeur par défaut n'existe pour BaseClass. Cela conduit à l'erreur du compilateur, indiquant qu'un constructeur explicite doit être défini dans la sous-classe.
Solution :
Pour résoudre cette erreur, il faut fournir un constructeur explicite dans la sous-classe qui appelle le super constructeur en utilisant super(parameters). Alternativement, la classe de base peut être modifiée pour fournir un constructeur par défaut.
// Option 1: Provide an explicit constructor in the subclass public class ACSubClass extends BaseClass { public ASubClass(String someString) { super(someString); } public String getName() { return "name value for ASubClass"; } } // Option 2: Modify the base class to have a default constructor abstract public class BaseClass { String someString; public BaseClass() {} // added default constructor public BaseClass(String someString) { this.someString = someString; } abstract public String getName(); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!