Bonsoir, dans le constructeur de la classe fille existe implicitement ou par default le super de la classe parente, sans l'avoir ajouté ? besoin de clarification la dessus.
Merci .
Bonsoir, dans le constructeur de la classe fille existe implicitement ou par default le super de la classe parente, sans l'avoir ajouté ? besoin de clarification la dessus.
Merci .
Un appel au constructeur de la classe parente.
Et oui, c'est inévitable. Les constructeurs d'une classe fille doivent toujours commencer par appeler le constructeur de la classe parente. L'appel à super(); est implicite si :
- Il n'y a pas d'appel explicite d'un constructeur ;
- l'appel explicite à super(); marcherait (autrement dit, si la classe parente a un constructeur sans paramètre et visible pour la classe fille.)
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
ici dans la classe parente nous avons un constructeur avec paramètre et pourtant le code ne compile pas tant qu'on a pas encore ajouter le super() dans le constructeur employee(String id) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class Person { String name="No name"; public Person(String nm){ name =nm;} class Employee extends Person{ String empID = "0000"; public employee(String id){ empID = id; } public class EmployeeTest { public static void main( String [] args) { Employee e = new Employee("4231"); System.out.println(e.empID); }}
Exactement. S'il n'y a ni appel explicite, ni appel implicite (du fait qu'il n'existe pas de constructeur à appeler implicitement,) alors ça ne compile pas.
L'appel au constructeur de la classe mère est obligatoire.
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
peux tu m'expliquer stp en faisant la comparaison entre ce code et l'exemple précédent.. pourquoi ici nous avons pas utilisé super() dans les constructeursle resultat retourné 123
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 abstract class C1 { public C1(){ System.out.print(1); } } class C2 extends C1{ public C2(){ System.out.print(2); } } class C3 extends C2{ public C3(){ System.out.print(3); } public class Ctest { public static void main (String [] a) { new C3(); } }
... Parce qu'il est implicite ? Tu te rappelles, 3 posts au-dessus ?
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Bonjour,
En fait, l'appel implicite ne peut se faire que s'il existe un constructeur sans paramètre dans ta classe parente.
Si ta classe parente n'a pas de constructeur sans paramètre alors il te faudra l'appeler explicitement.
Dans l'exemple que tu donnes on aurait pu écrire C2 comme suit :
Mathieu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class C2 extends C1 { public C2() { super(); // qui appelle le constructeur de C1 System.out.print(2); } }
Merci c'est bien clair mnt
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager