ऑब्जेक्ट.क्लोन() विधि निर्दिष्ट नहीं करता है कि सबक्लास की प्रति गहरी या उथली प्रतिलिपि है, यह पूरी तरह से विशिष्ट वर्ग पर निर्भर है। ऑब्जेक्ट.क्लोन() विधि स्वयं एक उथली प्रतिलिपि (ऑब्जेक्ट क्लास की आंतरिक स्थिति की प्रतिलिपि बनाता है), लेकिन उप-वर्गों को इसे ओवरराइड करना होगा, super.clone() को कॉल करना होगा, और आवश्यकतानुसार अपनी आंतरिक स्थिति की प्रतिलिपि बनाना चाहिए (उथला या गहरा)।
यह कुछ सम्मेलनों को निर्दिष्ट करता है, जिन्हें आप अनुसरण कर सकते हैं या नहीं। के लिए (a.getClass() == a.clone()। GetClass()) सत्य वापस करने के लिए, super.clone() को केवल 'नया सबक्लास()' के बजाय बुलाया जाना चाहिए, क्योंकि super.clone() संभवत: सही ढंग से सही होगा इस ऑब्जेक्ट की कक्षा को तुरंत चालू करें (यहां तक कि उप-वर्गों में), और निजी क्षेत्र समेत सभी आंतरिक राज्यों की प्रतिलिपि बनाएँ, जिन्हें कॉपी प्रतिलिपि, उचित दृश्यता नियमों का उपयोग करके सबक्लास द्वारा कॉपी नहीं किया जा सका। या बेहतर encapsulation के लिए, आपको एक ऐसे कन्स्ट्रक्टर का पर्दाफाश करने के लिए मजबूर होना चाहिए जिसे प्रकट नहीं किया जाना चाहिए।
उदाहरण:
//simple clone
class A implements Cloneable {
private int value;
public A clone() {
try {
A copy = (A) super.clone();
copy.value = this.value;
return copy;
} catch (CloneNotSupportedException ex) {}
}
}
//clone with deep and shallow copying
class B extends A {
Calendar date;
Date date;
public B clone() {
B copy = (B) super.clone();
copy.date = (Calendar) this.date.clone(); // clones the object
copy.date = this.date; // copies the reference
return copy;
}
}
डीप कॉपी आमतौर पर इस्तेमाल किया जाता है जब निर्भर वस्तुओं परिवर्तनशील (कैलेंडर) के हैं, और प्रतिलिपि मूल की पूरी तरह से स्वतंत्र होना चाहिए।
जब निर्भर वस्तुएं अपरिवर्तनीय (दिनांक की तरह) होती हैं, तो वही उदाहरण साझा करना आम तौर पर कोई मुद्दा नहीं है, और एक उथली प्रति पर्याप्त हो सकती है।
ऑब्जेक्ट.क्लोन() का उपयोग करते समय आपको कुछ नियमों का पालन करना होगा, लेकिन वे समझने योग्य होने के लिए काफी सरल हैं। शायद सबसे मुश्किल हिस्सा सही ढंग से परिभाषित कर रहा है कि आपको अपने ऑब्जेक्ट ग्राफ़ में कितनी गहरी प्रतिलिपि बनाना चाहिए। एक तार्किक मुद्दा, एक भाषा मुद्दा नहीं, जो है।
सही - सबसे आम परिदृश्य "क्लोन का उपयोग न करें।" –
लिंक टूट गया था। –
साइट आर्टिमा से यह लिंक मिला: http://www.artima.com/intv/bloch13.html –