En héritage en java, la sous-classe n'héritera pas du constructeur de la classe parent, mais elle doit appeler (implicite ou explicite)
Regardons l'exemple :
public class TestExtends { public static void main(String[] args) { SonClass s = new SonClass(66); } } class FooClass{ public FooClass() { System.out.println(100); } public FooClass(int count) { System.out.println(count); } } class SonClass extends FooClass{ public SonClass() { } public SonClass(int c) { System.out.println(1234); } }
Résultat d'exécution :
100
1234
Ensuite, analysez pourquoi un tel résultat est produit :
Lorsque le programme exécute la ligne SonClass s = new SonClass(66);
, il appelle
public SonClass(int c) { System.out.println(1234); //在执行这行时系统会优先调用父类的无参构造函数super(); }
Par conséquent, lorsque la sous-classe s'exécute. la méthode constructeur ci-dessus, cela équivaut à exécuter le code suivant :
public SonClass(int c) { super(); // 必须在第一行调用,否则不能编译 System.out.println(1234); //在执行这行时系统会优先调用父类的无参构造函数super(); }
Le résultat est donc :100 1234
Ensuite, un autre cas (appel explicite) est introduit . Si la sous-classe Le constructeur s'écrit comme ceci :
public SonClass(int c) { super(2); // 必须写在第一行,否则不能编译,显式调用父类构造函数后,系统就不在默认调用无参构造函数了 System.out.println(1234); }
La structure d'exécution est : 2 1234
Les constructeurs ne peuvent pas être hérités et ne sont utilisés que pour être appelés dans les sous-classes (si la classe parent n'a pas de constructeur sans paramètre, lors de la création d'une sous-classe, elle doit être explicitement appelée dans la première ligne de le corps du code du constructeur de sous-classe) La classe parent a un constructeur paramétré, sinon elle ne peut pas être compilée
Si la classe parent n'a pas de constructeur paramétré, alors vous n'avez pas besoin de le faire) ; appelle explicitement le constructeur de la classe parent lors de la création d'une sous-classe. Le système appellera par défaut le constructeur sans paramètre de la classe parent
super()
;Si la classe parent n'a pas de constructeur sans paramètre, le le système ne peut pas appeler le constructeur sans paramètre par défaut, donc si l'appel à la compilation n'est pas affiché, il ne passera pas ;
Explication supplémentaire :
En Java, après avoir créé un constructeur paramétré, le système n'aura plus de constructeur sans paramètre par défaut
S'il n'y a pas de constructeur dans la classe parent, le système aura un constructeur sans paramètre par défaut
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!