Accueil
 Sommaire du cours
 1  Introduction à Java
 2  Concepts de bases de Java
 3  Classes et objets en Java
 4  Généralisation spécialisation en Java
 5  Organisation des sources Java
 6  API Java
 7  Exceptions en Java
 8  Concepts objets avancés en Java
 8.1  Copie simple/légère
 8.1.1  Copie pour studs
 8.1.2  Représentation graphique d'une copie légère dans studs
 8.1.3  Exemple de copie légère
 8.1.4  Représentation graphique d'une copie plus profonde dans studs
 8.1.5  Copie plus profonde dans studs
 8.1.6  Représentation graphique d'une copie profonde
 8.1.7  Clone de Scrutin
 8.1.8  Clone en copie profonde de Personne
 8.1.9  Suite exemple de copie profonde
 8.2  Retour sur \texttt hashCode()
 8.3  Retour sur les exceptions
 Bibliographie

 Contacts

W3C validator

Département INF  
 Conception et programmation orientées objet


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
      Figures/J08f02
    • o2 = o1.clone() : o2 référence un nouvel objet (copie de o1)
      Figures/J08f03

    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