Le Jeudi 6 Mars 2003 11:54, HAREL Anthony a �crit :
> Que fait exactement la m�thode clone de la classe Object?
> Si je veux pouvoir cloner un objet, faut-il que je sucharge la
> methode clone() de mani�re a effectivement effectuer une copie
> profonde de mon objet au lieu de copier des r�ferences?

Pour une fois, Dieu soit lou�, la m�thode clone fait ce que l'on croit qu'elle 
fait : un clone !

C'est � dire que l'objet d'origine et l'objet clon� ont tous exactement les 
m�mes valeurs _ET LES MEMES REFERENCES_ d'attributs, seule la r�f�rence de 
l'objet d'origine est diff�rente de celle de l'objet clon�. Il est important 
de bien comprendre et de bien se rendre compte que les attributs ne sont pas 
clon�s, du moins dans la m�thode fournie par java.lang.Object.

Si tu veux pouvoir cloner un objet, il faut que tu lui refiles 
l'impl�mentation java.lang.Cloneable, et que tu utilises la m�thode clone. Tu 
n'as besoin de surcharger cette m�thode que si tu veux la rendre publique 
(elle est protected au d�part), ou si tu veux modifier le comportement de 
clone.

Modifier le comportement de clone est int�ressant si tu veux cloner aussi les 
attributs, ce qui est souvent utile, bien que pas toujours possible. Si tu le 
fait, dans ta nouvelle m�thode clone il faut toujours appeler super.clone(), 
et travailler � partir de l'objet que te renvoie cet appel.

Par exemple :

class Z implements java.lang.Cloneable
{
 Attribut nimportequoi;

 public Object clone()
 {
  Z z = (Z)super.clone();
  z.nimportequoi = (Attribut)nimportequoi.clone(); 
  return z;
 }
}


-- 
SARL diaam informatique - 04 50 32 59 84
Ingenierie, d�veloppements de syst�mes d'information
http://www.diaam-informatique.com


Répondre à