Est-ce que la fonction clone équivaut à cela:
Est-ce que cela:
équivaut à cela:Code:
1
2
3 Object p1; object p3=new object(p1);
Code:
1
2
3 Object p1; object p3= p1.clone();
Version imprimable
Est-ce que la fonction clone équivaut à cela:
Est-ce que cela:
équivaut à cela:Code:
1
2
3 Object p1; object p3=new object(p1);
Code:
1
2
3 Object p1; object p3= p1.clone();
Non...
En Java, il n'y a pas de constructeur par copie implicite. Et même si rien n'empêche de faire des constructeurs par copie dans ses classes, ce n'est pas une pratique courante et on n'en trouvera pas dans les autres classes Java.
Donc en général, object p3=new object(p1); ne sera pas valide, puisque le constructeur appelé n'existera pas.
Par ailleurs, la méthode clone() a un effet par défaut, qui est de créer une nouvelle instance et d'y copier tous les champs de l'instance en cours. Mais la méthode clone() peut être redéfinie, de sorte d'avoir n'importe quel effet autre. Ce qui est utile par exemple quand on souhaite un clonage plus profond que par défaut.
On ne peut donc pas parler d'équivalence. Chaque chose fait ce qu'elle fait.
Merci pour ta reponse mais j'avais cru que le premier créer un nouvel objet avec les memes caractéristiques que p1 et que le deuxieme clone p1 (donc qui créer aussi un deuxieme objet avec les meme caracteristique que p1 aussi) donc ce qui revient au meme
Ben comme je te l'ai dit le premier n'existe pas, donc il fait rien, tu peux pas mettre ça dans ton programme, c'est tout.
Quant au second, oui, il fait ça par défaut, mais vu que clone() peut être redéfinie, ça dépend si clone() a été redéfinie ou pas, et si oui pour quoi faire, bien sûr.
Quoi qu'il en soit, on ne peut pas être équivalent avec soi-même. Comme le premier n'existe pas, il n'y a que le second, et donc il n'est pas équivalent.
Meme avec ceci?Code:
1
2
3 personne p1; personne p3=new personne(p1);
Même avec ceci. Tu as juste remplacé object par personne. Il n'y a pas de classe object ni personne dans Java, donc je suppose que tu parles de n'importe quelle classe général.
Et en général, les classes Java n'ont pas de constructeur de ce genre et cette syntaxe ne marche pas.
Il m'a semblé que la classe "Object" est la classe mère de tous
Oui, avec un O majuscule.
Et elle n'a pas de constructeur avec paramètre, et on ne peut pas appeler clone() sur une variable de type Object.