Super et this

Résolu
pskch Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
pskch Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir s'il vous plait on sait que le mot clé super doit être on premier instruction dans le constructeur de la classe fille et this aussi comment faire si on peut faire les deux dans même constructeur ?
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Ton affirmation ne vaut que pour l'appel d'un autre constructeur.
Pour l'utilisation d'autres méthodes tu peux alterner super et this si tu en as besoin.

Exemple :

public class A {
    public A(String str) { }
    public void m1() { }
    public void m2() { }
    public void m3() { }
    public void m4() { }
}

public class B extends A {

    public B() {
        this("toto");
        super.m1();
        this.m2();
    }

    public B(String str) {
        super(str);
        this.m3();
        super.m4();
    }
}

Attention : appeler des méthodes surchargées dans le constructeur peut entraîner des erreurs. C'est pour ça qu'en pratique on évite d'utiliser les appels super.m()
0
pskch Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
non je veux faire appel au constructeur de la classe mère à l'aide de super et this au meme temps pas l'appel d'une methode de la classe mère par exemple dans votre cas je veux faire :
Si on a dans le constructeur de la classe mère Public A(){ System.out.printf("constructeur de A");
}
et on fai dans le constructeur de la classe fille Public B(){
super();
this("toto");
}
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > pskch Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
As-tu compris à quoi servait un constructeur ?
Son rôle est d'instancier une première valeur à l'objet et donc à tous ses champs.

Du coup ça ne sert à rien d'initialiser deux fois tes valeurs, ce que tu ferais en appelant à la fois super et this. En effet, le constructeur appelé avec this, fait déjà un appel à super, donc si tu fais super(), puis this("toto"), tu fais deux fois super, tu initialiserais donc deux fois les champs de la classe mère. L'appel de deux constructeurs comme ça est donc interdit, pour éviter tout conflit.
0
pskch Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
oooh ouii maintenant j'ai compris merci bien :)
0