मुझे जावा में एक उप-वर्ग क्लोन करने की आवश्यकता है, लेकिन उस बिंदु पर जहां कोड होता है, मुझे सबक्लास प्रकार, केवल सुपर क्लास नहीं पता होगा। ऐसा करने के लिए सबसे अच्छा डिजाइन पैटर्न क्या है?जावा में क्लोनिंग उप-वर्ग
उदाहरण:
class Foo {
...
public Foo copy() {
return new Foo(this);
}
}
class Bar extends Foo {
...
@Override public Bar copy() {
return new Bar(this);
}
}
(आदर्श रूप में कक्षाएं या तो सार या प्रभावी ढंग से करते हैं:
class Foo {
String myFoo;
public Foo(){}
public Foo(Foo old) {
this.myFoo = old.myFoo;
}
}
class Bar extends Foo {
String myBar;
public Bar(){}
public Bar(Bar old) {
super(old); // copies myFoo
this.myBar = old.myBar;
}
}
class Copier {
Foo foo;
public Foo makeCopy(Foo oldFoo) {
// this doesn't work if oldFoo is actually an
// instance of Bar, because myBar is not copied
Foo newFoo = new Foo(oldFoo);
return newFoo;
// unfortunately, I can't predict what oldFoo's the actual class
// is, so I can't go:
// if (oldFoo instanceof Bar) { // copy Bar here }
}
}
नहीं, काम नहीं करता है। इसे आज़माएं: बार बार = नया बार(); फू foo = बार; foo.copy()। यह Foo.copy(), बार नहीं होगा।कॉपी() – ccleve
@ user237815 मुझे ऐसा नहीं लगता है। 'Bar.copy' ओवरराइड (' @ ओवरराइड' के साथ चेक किया गया) 'Foo.copy'। –
टॉम सही है। 'प्रतिलिपि' का आवेषण रनटाइम पर होता है और JVM ऑब्जेक्ट के प्रकार के आधार पर उपयुक्त 'प्रतिलिपि' विधि को कॉल करेगा। –