Tout d'abord quelques termes:
-
Aucun des arguments du constructeur: un constructeur sans paramètres;
-
Accessible sans args constructeur: aucun des arguments du constructeur de la superclasse visible à la sous-classe. Cela signifie qu'il soit public ou protégé ou, si les deux classes sont dans le même package, des accès; et
-
Constructeur par défaut: le public n'-args constructeur ajouté par le compilateur lorsqu'il n'est pas explicite d'un constructeur dans la classe.
Donc, toutes les classes ont au moins un constructeur.
Les sous-classes les constructeurs peuvent spécifier que la première chose qu'ils font quel constructeur de la super-classe pour appeler avant d'exécuter le code dans le constructeur de la sous-classe.
Si le constructeur de sous-classe ne spécifie pas le constructeur de la superclasse d'invoquer ensuite le compilateur appelle automatiquement la accessible sans args constructeur de la superclasse.
Si la super-classe n'a pas de no-arg constructeur ou il n'est pas accessible, alors ne précisant pas le constructeur de la superclasse d'être appelé (dans le constructeur de sous-classe) est une erreur de compilation, de sorte qu'il doit être spécifié.
Par exemple:
public class Base { }
public class Derived extends Base { }
C'est bien parce que si vous ajoutez pas de constructeur explicitement Java met dans un établissement public de constructeur par défaut pour vous.
public class Base { }
public class Derived extends Base { public Derived(int i) { } }
Aussi bien.
public class Base { public Base(String s) { } }
public class Derived extends Base { }
Le ci-dessus est une erreur de compilation car la Base n'a pas de constructeur par défaut.
public class Base { private Base() { } }
public class Derived extends Base { }
C'est aussi une erreur, car de Base par défaut du constructeur est privé.