La methode clone()

Résolu/Fermé
securinets Messages postés 77 Date d'inscription dimanche 30 septembre 2012 Statut Membre Dernière intervention 11 septembre 2014 - 28 mars 2013 à 23:08
securinets Messages postés 77 Date d'inscription dimanche 30 septembre 2012 Statut Membre Dernière intervention 11 septembre 2014 - 30 mars 2013 à 12:38
Bonjour,
class A{ //extends java.lang.Object
void method( A autreinstance ) {
A autre = autreinstance.clone();
// refusé par le compilateur . . .
pourquoi cette affectation est refusé par le compilateur?
merci d'avance.

A voir également:

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
29 mars 2013 à 18:02
La méthode clone est définie dans Object, mais elle est protected, pas public.
Il faudrait que ta classe A implements Cloneable pour que l'utilisation de clone() soit valide.

Regarde sa documentation, il y a pas mal d'infos :
java.lang.Object.clone()
java.lang.Cloneable
0
securinets Messages postés 77 Date d'inscription dimanche 30 septembre 2012 Statut Membre Dernière intervention 11 septembre 2014 1
29 mars 2013 à 23:24
mais on sait que toute classe est heritée en faite de la classe Object et je pense qu'une classe fille a acces aux methodes et attributs public et protected de la classe mére donc normalement un objet de type A a acces à la methode clone() je ne comprend pas merci pour tout explication
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
30 mars 2013 à 06:20
clone() est un peu particulière, elle est définie protected par Object de manière à rendre disponible un comportement par défaut pour toutes les classes qui voudrait l'hériter (avec super), mais elle ne doit être utilisée directement comme tu le fais que quand elle est public, c'est à dire sur des objets Cloneable, sinon tu vas avoir une exception car l'opération ne sera pas supportée.

Tout cela est d'ailleurs marqué dans la documentation que je t'ai indiqué hier :

"A class implements the Cloneable interface to indicate to the Object.clone() method that it is legal for that method to make a field-for-field copy of instances of that class.
Invoking Object's clone method on an instance that does not implement the Cloneable interface results in the exception CloneNotSupportedException being thrown.
By convention, classes that implement this interface should override Object.clone (which is protected) with a public method."


if (x instanceof Cloneable)
    y = x.clone();
else
    throw new CloneNotSupportedException();
0
securinets Messages postés 77 Date d'inscription dimanche 30 septembre 2012 Statut Membre Dernière intervention 11 septembre 2014 1
30 mars 2013 à 12:38
je vois merci :)
0