Bonjour,
Je ne sais pas si ma question =E0 d=E9j=E0 =E9t=E9 pos=E9, mais j'ai un pro=
bl=E8me
quand je cr=E9e une instance d'une classe avec les m=EAmes valeurs
d'attribut qu'une autre d=E9j=E0 existante.
Je m'explique :
j'ai une classe, que j'appellerais MaClasse qui a pour constructeur
quelque chose de ce genre
public class MaClasse implements IntrefaceDeMaClasse, Serializable{
private type attribut1;
private type attribut2;
...
public MaClasse () {
}
public MaClasse ( InterfaceDeMaClasse maVieilleClasse ) {
this.attribut1=3DmaVieilleClasse.getAttribut1();
this.attribut2=3DmaVieilleClasse.getAttribut2();
...
}
}
et lorsque je fais
MaClasse c2 =3D new MaClasse(c1);
c'est equivalent =E0
c2=3Dc1;
Avez vous une id=E9e de l'endroit o=F9 j'ai fait une erreur ?
Je vous remercie d'avance pour les r=E9ponse que vous pourrez me donner.
> et lorsque je fais > MaClasse c2 = new MaClasse(c1);
> c'est equivalent à > c2Á;
Non.
public class MaClasseImpl implements MaClasse, Serializable { private String attrib1; public String getattrib1() { return attrib1; }
[...]
Dans le code que tu donnes plus haut, le constructeur fait :
this->attrib1 = other->getattrib1()
Suite à cela, tes deux objets ont chacun un attribut attrib1, mais les deux référencent la même instance de String (ce qui n'est pas grave, puisque String est immuable).
Mon objectif est que c1 et c2 pointent chacun vers une instance differente.
Dans ce cas, il faut créer explicitement la nouvelle instance. Ce n'est *pas* ce que fait c2Á.
-- Alain.
disease <lord.disease@gmail.com> writes:
> et lorsque je fais
> MaClasse c2 = new MaClasse(c1);
> c'est equivalent à
> c2Á;
Non.
public class MaClasseImpl implements MaClasse, Serializable {
private String attrib1;
public String getattrib1() {
return attrib1;
}
[...]
Dans le code que tu donnes plus haut, le constructeur fait :
this->attrib1 = other->getattrib1()
Suite à cela, tes deux objets ont chacun un attribut attrib1, mais les
deux référencent la même instance de String (ce qui n'est pas grave,
puisque String est immuable).
Mon objectif est que c1 et c2 pointent chacun vers une instance
differente.
Dans ce cas, il faut créer explicitement la nouvelle instance. Ce
n'est *pas* ce que fait c2Á.
> et lorsque je fais > MaClasse c2 = new MaClasse(c1);
> c'est equivalent à > c2Á;
Non.
public class MaClasseImpl implements MaClasse, Serializable { private String attrib1; public String getattrib1() { return attrib1; }
[...]
Dans le code que tu donnes plus haut, le constructeur fait :
this->attrib1 = other->getattrib1()
Suite à cela, tes deux objets ont chacun un attribut attrib1, mais les deux référencent la même instance de String (ce qui n'est pas grave, puisque String est immuable).
Mon objectif est que c1 et c2 pointent chacun vers une instance differente.
Dans ce cas, il faut créer explicitement la nouvelle instance. Ce n'est *pas* ce que fait c2Á.
-- Alain.
disease
On 17 fév, 13:46, Alain Ketterlin wrote:
disease writes: >> > et lorsque je fais >> > MaClasse c2 = new MaClasse(c1);
>> > c'est equivalent à >> > c2Á;
>> Non. > public class MaClasseImpl implements MaClasse, Serializable { > private String attrib1; > public String getattrib1() { > return attrib1; > }
[...]
Dans le code que tu donnes plus haut, le constructeur fait :
this->attrib1 = other->getattrib1()
Suite à cela, tes deux objets ont chacun un attribut attrib1, mais les deux référencent la même instance de String (ce qui n'est pas grave , puisque String est immuable).
> Mon objectif est que c1 et c2 pointent chacun vers une instance > differente.
Dans ce cas, il faut créer explicitement la nouvelle instance. Ce n'est *pas* ce que fait c2Á.
-- Alain.
c'est pourquoi je fais MaClasse c2 = new MaClasse(c1);
On 17 fév, 13:46, Alain Ketterlin <al...@dpt-info.u-strasbg.fr> wrote:
disease <lord.dise...@gmail.com> writes:
>> > et lorsque je fais
>> > MaClasse c2 = new MaClasse(c1);
>> > c'est equivalent à
>> > c2=c1;
>> Non.
> public class MaClasseImpl implements MaClasse, Serializable {
> private String attrib1;
> public String getattrib1() {
> return attrib1;
> }
[...]
Dans le code que tu donnes plus haut, le constructeur fait :
this->attrib1 = other->getattrib1()
Suite à cela, tes deux objets ont chacun un attribut attrib1, mais les
deux référencent la même instance de String (ce qui n'est pas grave ,
puisque String est immuable).
> Mon objectif est que c1 et c2 pointent chacun vers une instance
> differente.
Dans ce cas, il faut créer explicitement la nouvelle instance. Ce
n'est *pas* ce que fait c2=c1.
-- Alain.
c'est pourquoi je fais
MaClasse c2 = new MaClasse(c1);
disease writes: >> > et lorsque je fais >> > MaClasse c2 = new MaClasse(c1);
>> > c'est equivalent à >> > c2Á;
>> Non. > public class MaClasseImpl implements MaClasse, Serializable { > private String attrib1; > public String getattrib1() { > return attrib1; > }
[...]
Dans le code que tu donnes plus haut, le constructeur fait :
this->attrib1 = other->getattrib1()
Suite à cela, tes deux objets ont chacun un attribut attrib1, mais les deux référencent la même instance de String (ce qui n'est pas grave , puisque String est immuable).
> Mon objectif est que c1 et c2 pointent chacun vers une instance > differente.
Dans ce cas, il faut créer explicitement la nouvelle instance. Ce n'est *pas* ce que fait c2Á.
-- Alain.
c'est pourquoi je fais MaClasse c2 = new MaClasse(c1);
Christian Laborde
Oui mais les attributs ne sont pas de nouveaux objets. Ce sont les mêmes.
disease a écrit :
On 17 fév, 13:46, Alain Ketterlin wrote:
disease writes:
et lorsque je fais MaClasse c2 = new MaClasse(c1); c'est equivalent à c2Á;
Non.
public class MaClasseImpl implements MaClasse, Serializable { private String attrib1; public String getattrib1() { return attrib1; }
[...]
Dans le code que tu donnes plus haut, le constructeur fait :
this->attrib1 = other->getattrib1()
Suite à cela, tes deux objets ont chacun un attribut attrib1, mais les deux référencent la même instance de String (ce qui n'est pas grave, puisque String est immuable).
Mon objectif est que c1 et c2 pointent chacun vers une instance differente.
Dans ce cas, il faut créer explicitement la nouvelle instance. Ce n'est *pas* ce que fait c2Á.
-- Alain.
c'est pourquoi je fais MaClasse c2 = new MaClasse(c1);
-- Christian Laborde La Révolution citoyenne, c'est sur : http://c.lab.over-blog.com/ Le forum des électrons libres : http://electrons-libres.forumactif.fr True E-mail : remove -no-spam- Sentier des Vinches CH 1091 Grandvaux Suisse
Oui mais les attributs ne sont pas de nouveaux objets. Ce
sont les mêmes.
disease a écrit :
On 17 fév, 13:46, Alain Ketterlin <al...@dpt-info.u-strasbg.fr> wrote:
disease <lord.dise...@gmail.com> writes:
et lorsque je fais
MaClasse c2 = new MaClasse(c1);
c'est equivalent à
c2Á;
Non.
public class MaClasseImpl implements MaClasse, Serializable {
private String attrib1;
public String getattrib1() {
return attrib1;
}
[...]
Dans le code que tu donnes plus haut, le constructeur fait :
this->attrib1 = other->getattrib1()
Suite à cela, tes deux objets ont chacun un attribut attrib1, mais les
deux référencent la même instance de String (ce qui n'est pas grave,
puisque String est immuable).
Mon objectif est que c1 et c2 pointent chacun vers une instance
differente.
Dans ce cas, il faut créer explicitement la nouvelle instance. Ce
n'est *pas* ce que fait c2Á.
-- Alain.
c'est pourquoi je fais
MaClasse c2 = new MaClasse(c1);
--
Christian Laborde
La Révolution citoyenne, c'est sur : http://c.lab.over-blog.com/
Le forum des électrons libres :
http://electrons-libres.forumactif.fr
True E-mail : remove -no-spam-
Sentier des Vinches
CH 1091 Grandvaux
Suisse
Oui mais les attributs ne sont pas de nouveaux objets. Ce sont les mêmes.
disease a écrit :
On 17 fév, 13:46, Alain Ketterlin wrote:
disease writes:
et lorsque je fais MaClasse c2 = new MaClasse(c1); c'est equivalent à c2Á;
Non.
public class MaClasseImpl implements MaClasse, Serializable { private String attrib1; public String getattrib1() { return attrib1; }
[...]
Dans le code que tu donnes plus haut, le constructeur fait :
this->attrib1 = other->getattrib1()
Suite à cela, tes deux objets ont chacun un attribut attrib1, mais les deux référencent la même instance de String (ce qui n'est pas grave, puisque String est immuable).
Mon objectif est que c1 et c2 pointent chacun vers une instance differente.
Dans ce cas, il faut créer explicitement la nouvelle instance. Ce n'est *pas* ce que fait c2Á.
-- Alain.
c'est pourquoi je fais MaClasse c2 = new MaClasse(c1);
-- Christian Laborde La Révolution citoyenne, c'est sur : http://c.lab.over-blog.com/ Le forum des électrons libres : http://electrons-libres.forumactif.fr True E-mail : remove -no-spam- Sentier des Vinches CH 1091 Grandvaux Suisse
Antoine
> et lorsque je fais MaClasse c2 = new MaClasse(c1);