Pourquoi remplacer la méthode clone en Java
Je suis confus en ce qui concerne substituant la méthode clone dans la classe pour laquelle je veux l'objet cloné.
Objet de la classe a objet protégé méthode et par les protégés de comportement qui est Lorsqu'une méthode est protégé, il ne peut être accédé que par la classe elle-même, les sous-classes de la classe ou de classes dans le même package que la classe.
Que chaque classe en Java s'étend de l'Objet, de sorte qu'il devrait avoir méthode clone mais encore, nous sommes obligés de remplacer clone. Pourquoi est-elle nécessaire?
Aussi, j'ai lu à certains endroits pour remplacer le clone de l'objet et de le rendre public. Je me demande, pourquoi est-il si?
Toutes les réponses sont les bienvenues.
source d'informationauteur Anand
Vous devez vous connecter pour publier un commentaire.
Non, vous n'êtes pas obligé de remplacer le
clone
méthode. En héritage, quand on hérite d'une classe, vous n'êtes pas obligés de remplacer la méthode. Son modificateur d'être public ou protégé n'a pas beaucoup de différence. Cependant, si vous souhaitez appeler une méthode directement sursuper
classe de référence, alors que la méthode doit êtrepublic
. Protégé méthodes sont accessibles uniquement par le biais de l'héritage. C'est vous ne pouvez accéder par le biais desubclass
de référence. Ou si vous substituez la méthode, vous pouvez y accéder à traverssuper
mot-clé.Cela dit, vous ne devriez pas ignorer
clone
méthode, comme il estbroken
. Parce que, pour une classe à être cloné, vous avez besoin pour mettre en œuvre lesCloneable
interface. Et puis, votre classe utilise laclone
méthode deObject
classe à la place. Parce que,Cloneable
interface n'est pas exactement n'importe quelle méthode pourcloning
. Ce serait une meilleure option pour utiliserCopy Constructor
à la place.Pour plus de détails, je vous suggère d'aller à travers ce chapitre de
Joshua Bloch's
Efficace Java, qui couvre tous les aspects de l'utilisation declone
méthode.Efficace Java - Article n ° 11 - Override clone judicieusement
Je vous recommande la lecture de Joshua Bloch de Efficace Java 2e édition. Il a un bon chapitre consacré clone.
Je ne vous conseille pas de faire cela. Je considère cela comme un JDK 1.0 erreur. Le livre fera que plus claire.
Je vous recommande la rédaction d'un constructeur de copie au lieu d'obtenir ce que vous voulez:
Dans de nombreux cas, il n'est pas clair ce qu'est un objet cloné doit être et comment il doit se comporter, donc si vous voulez que votre classe soit clonable vous avez le dire explicitement par substitution de clone et de la rendre publique.
Cas où clone ne pourrait pas faire de sentiment inclure les classes qui représentent une ressource, comme une connexion réseau ou d'un verrou de synchronisation. Si ces objets pourrait être cloné il n'est pas clair comment le clone doit se comporter. Par exemple, le clone d'une connexion réseau ont une connexion TCP/IP lui est propre, ou est-il en quelque sorte d'utiliser l'existant?
Clone est
Protected
méthode dansObject
classe de sorte qu'il est accessible pour vous à l'intérieur de la classe.Sur l'accès - Lorsqu'une méthode est protégé, il ne peut être accédé que par la classe elle-même, les sous-classes de la classe ou de classes dans le même package que la classe.
Je vois certaines idées fausses sur la méthode clone
clone()
méthode estprotected
à l'intérieur deObject
classe de sorte que vous ne pouvez pas appelerclone()
à l'extérieur de la classe. par exemple,child.clone()
sauf si vous la remplacez, et d'en rendre l'accèspublic
Cloneable
est un marqueur de l'interface et si vous ne marquez pas de classeCloneable
alors vous obtiendrezCloneNotSupportedException
si vous appelezclone()
méthodesuper.clone
besoin d'être modifié.super.clone
. Si une classe et l'ensemble de sessuperclasses (except Object)
obéir à la présente convention, il sera le cas quex.clone().getClass() == x.getClass()
.Signature de la méthode est en dessous de
Références :