voici un petit test, s'il vous plait essayer de r=E9pondre sans compiler
et ex=E9cuter le code. Voici Deux classes (ci-dessous), la question est:
Lorsque j'execute B, qu'est ce que je vois dans la console ?
D'autre part j'aimerais savoir s'il ya une solution =E0 mon probl=E8me:
est-ce que quelqu'un sait ce qu'il faut faire pour avoir le
fonctionnement attendu ? selon les specs java de sun dans l'ordre:
- initialisation des variables
- ex=E9cution des blocs d'initialisation
- appel du constructeur
merci pour votre participation
public class A
{
public A()
{
super();
System.out.println(this);
}
}
public class B extends A
{
private String toto =3D "coucou1";
{
toto =3D "coucou2";
}
public B()
{
super();
toto =3D "coucou3";
}
public String toString()
{
return toto;
}
public static void main(String[] args)
{
new B();
}
}
En fait ici B reimplémente une méthode d'une superclasse de A : Object::toString(). ce qui est étonnant, c'est que le constructeur de A ait accès au toString() de B et non pas au toString de Object
chez moi j'ai un null et comme je me suis fait la même remarque en gros j'ai bien un null, et j'ai donné mon explication. La méthode toString()
a bien été redefinie, mais toto n'a pas encore été initialisé (le toto="..."; est en fait déplacé par le compilo dans le constructeur après l'appel à super)
En fait ici B reimplémente une méthode d'une superclasse de A :
Object::toString().
ce qui est étonnant, c'est que le constructeur de A ait accès au
toString() de B et non pas au toString de Object
chez moi j'ai un null
et comme je me suis fait la même remarque en gros
j'ai bien un null, et j'ai donné mon explication. La méthode toString()
a bien été redefinie, mais toto n'a pas encore été initialisé (le
toto="..."; est en fait déplacé par le compilo dans le constructeur
après l'appel à super)
En fait ici B reimplémente une méthode d'une superclasse de A : Object::toString(). ce qui est étonnant, c'est que le constructeur de A ait accès au toString() de B et non pas au toString de Object
chez moi j'ai un null et comme je me suis fait la même remarque en gros j'ai bien un null, et j'ai donné mon explication. La méthode toString()
a bien été redefinie, mais toto n'a pas encore été initialisé (le toto="..."; est en fait déplacé par le compilo dans le constructeur après l'appel à super)
remy
En fait ici B reimplémente une méthode d'une superclasse de A : Object::toString(). ce qui est étonnant, c'est que le constructeur de A ait accès au toString() de B et non pas au toString de Object
chez moi j'ai un null et comme je me suis fait la même remarque en gros j'ai bien un null, et j'ai donné mon explication. La méthode toString()
a bien été redefinie,
l'on est d'accord il y a bien redéfinition de toString() donc utilisation de toString() de B mais se qui m'échappe c'est le résultat dans mon teste
mais toto n'a pas encore été initialisé (le toto="..."; est en fait déplacé par le compilo dans le constructeur après l'appel à super)
oui peut etre :-)
En fait ici B reimplémente une méthode d'une superclasse de A :
Object::toString().
ce qui est étonnant, c'est que le constructeur de A ait accès au
toString() de B et non pas au toString de Object
chez moi j'ai un null
et comme je me suis fait la même remarque en gros
j'ai bien un null, et j'ai donné mon explication. La méthode toString()
a bien été redefinie,
l'on est d'accord il y a bien redéfinition de toString()
donc utilisation de toString() de B
mais se qui m'échappe c'est le résultat dans mon teste
mais toto n'a pas encore été initialisé (le
toto="..."; est en fait déplacé par le compilo dans le constructeur
après l'appel à super)
En fait ici B reimplémente une méthode d'une superclasse de A : Object::toString(). ce qui est étonnant, c'est que le constructeur de A ait accès au toString() de B et non pas au toString de Object
chez moi j'ai un null et comme je me suis fait la même remarque en gros j'ai bien un null, et j'ai donné mon explication. La méthode toString()
a bien été redefinie,
l'on est d'accord il y a bien redéfinition de toString() donc utilisation de toString() de B mais se qui m'échappe c'est le résultat dans mon teste
mais toto n'a pas encore été initialisé (le toto="..."; est en fait déplacé par le compilo dans le constructeur après l'appel à super)