Demandred, c'est noté merci
artragis, un constructeur n'est pas une "méthode", une méthode est une fonction membre que tu appelles à partir de ton instance ou de ta classe si la méthode est static. Voici une définition de constructeur par Wikipédia :
a constructor (abbreviation: ctor) in a class is a special type of subroutine called to create an object
Moi aussi je peux jouer sur les "mots" Bref je te dis ça mais pour moi il existe 1 langage parmi lesquels je connais et dont le constructeur est… une simple méthode : PHP. Le constructeur en PHP n'appelle pas implicitement un constructeur parent, possède les mêmes règles de visibilité que le constructeur parent, donc d'une simple méthode (alors que Java ou C# non ce n'est pas pareil du tout) (cf: discussion avec Rasmus).
heu tu te fous de notre gueule
Non pas du tout. Tu me parles de "namespace", concept qui dans les faits n'existe pas en JS, bien que tu peux simuler pour obtenir une syntaxe équivalente aux autres langages qui eux ont leurs namespace
, package
, module
, mais moi lorsque j'utilise le terme "structure", tu vas penser au struct
de C# avec toutes ses particularités. Je te donnes un exemple avec des "classes anonymes" tu es d'accord, par contre lorsque je remplace le mot-clé class
par function
ou {}
et que j'appelle cela "structure anonyme" tu ne l'es plus. Donc si j'ajoute une troisième colonne dans le tableau de la partie 4 l'exemple de la classe anonyme et que j'appelle cette partie dont les trois exemples sont dans les faits identiques "classe anonyme" ça passe ? Tu ne me diras pas "tu ne peux pas appeler cela classe anonyme parce que les classes n'existent pas en JS" ?
Javier,
Quand tu surcharges un constructeur en Java, si t'appelles pas super (et en premier en plus…), ton constructeur parent est pas appelé. A moins que je n'ai pas compris ton propos.
Les VM en Java ou C# feront en sorte que ton constructeur appelle un constructeur parent implicitement (donc même si super()
ou base()
n'est pas précisé explicitement), ce sera la première instruction de tes constructeurs pour tous les cas d'héritage (je te dis ça parce que je n'ai pas compris pourquoi tu faisais référence à Object
en particulier). Il existe un cas particulier, lorsqu'un constructeur fait référence à un autre constructeur de la classe en cours (cf: this()
), mais le constructeur auquel on fait référence va lui aussi faire implicitement appel à un constructeur parent.
Un exemple de code vaut mieux que des paroles :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | class Parent {
public Parent(int a){
// super(); <- cette instruction est implicite
}
}
class Child extends Parent {
public Child(){
super(1); // Obligatoire de préciser super(int) sinon tu ne peux pas compiler
}
public Child(String s){
this(); // On fait appelle à Child() qui lui fera appelle à super(int)
}
}
|
victor, merci quand même.