OVH Cloud OVH Cloud

Initialisation d'un objet

12 réponses
Avatar
laurent
Bonjour,

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();
}
}

2 réponses

1 2
Avatar
Aris

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)


Avatar
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 :-)



1 2