8.1 Copie simple/légère
- Les objets sont manipulés par des références ⇒
-
o2 = o1 : copie la référence o1 dans o2
-
o2 = o1.clone() : o2 référence un nouvel objet (copie de o1)
précédent suivant
La classe Object propose une
copie légère par un clonage basé sur la copie champ par champ réalisée par
affectation : elle n’appelle pas récursivement la méthode clone() (pour cette raison, la copie est appelée légère).
Cette opération de clonage par défaut n’est possible que si la classe
réalise (implements) l’interface
java.lang.Cloneable. Si ce n’est pas le
cas, l’exception CloneNotSupportedException est levée. Cette copie champ par
champ est suffisante pour avoir deux objets indépendants lorsque les objets
copiés ne contiennent pas de référence.
Lorsque les objets contiennent des références, il faut
définir la méthode clone() pour cette classe,
mais aussi pour toutes les classes référencées par celle-ci, afin de réaliser
une copie récursive dite « copie profonde ».
La méthode clone est
protected dans la classe Object afin de restreindre l’utilisation de cette
méthode aux classes et à leurs classes filles. Si le clonage est garanti (par
la redéfinition de la méthode clone), celle-ci
doit devenir publique. Christian Bac, Denis Conan,
Télécom SudParis, CSC 4002, Octobre 2015
|