C++ Templates & Inheritance in Java -
मेरे पास सी क्लास में सी ++ है
ParentClass {वर्चुअल इंट मैमथि (); } क्लास मौजूदा एक: ParentClass {...} मौजूदा मौजूदा दो: ParentClass {...}
अब मैं एक ऐसा क्लास बनाना चाहूंगा जो मौजूदा वर्गों में से किसी एक को बढ़ा सकता है और एक जोड़े को ओवरराइड कर सकता है
सी ++ में यह निम्न का उपयोग करके किया जाता है:
टेम्पलेट & lt; क्लास बेसटेम्पलेट & gt; वर्ग MyClass: सार्वजनिक बेसटैप्लेट {int MyMethod () {DoSomething (); रिटर्न बेस टेम्प्लेट :: MyMethod (); }}
यह कैसे जावा में किया जाता है?
अब तक मेरे पास
सार्वजनिक सार वर्ग ParentClass {सार्वजनिक सार इंट MyMethod (); } पब्लिक क्लास ExistingOne ParentClass को विस्तारित करता है {...} सार्वजनिक वर्ग मौजूदा बॉटलिंग ParentClass {...} सार्वजनिक वर्ग MyClass & lt; T ParentClass को बढ़ाता है & gt; {सार्वजनिक इंट मायमथि () {डूसोमिंग ()) वापसी T.MyMethod (); // MyMethod स्थिर रूप से परिभाषित होना चाहिए? }}
ओह, और अंत में, मैं "मौजूदा" या मूल वर्ग को संशोधित नहीं कर सकता।
क्या यह सही दृष्टिकोण है? कैसे मैं स्थिर आवश्यकता का समाधान कर सकता हूं?
सी ++ क्लास परिभाषा में, MyClass
बेसटैप्लेट
को बढ़ाता है। जावा उदाहरण में, MyClass
विस्तार नहीं करता है ParentClass
, इस प्रकार अपेक्षित समस्या हो रही है।
जावा में, बस परिभाषा को इसमें बदलें:
पब्लिक क्लास मायक्लास & lt; टी पैरेन्ट क्लास का विस्तार & gt; ParentClass को विस्तारित करता है {@ ओवरराइड पब्लिक इंट मायमथ्यू () {डूसोमिंग ()); वापसी सुपर.मेयमथ (); }}
चूंकि MyMethod
में सार है ParentClass
, यह एक कंपाइलर त्रुटि देता है इसके बजाय, आपको ParentClass
के एक उदाहरण से MyMethod
को कॉल करने की आवश्यकता होगी। यह एक फ़ील्ड T t
अंदर MyClass
:
सार्वजनिक वर्ग MyClass & lt; T के द्वारा तय किया जा सकता है ParentClass & gt; ParentClass {टी टी; सार्वजनिक MyClass (टी टी) {this.t = टी; } @ ओवरराइड पब्लिक इंट मायमथ्यू () {डूसोमिंग (); वापसी t.MyMethod (); }}
अन्यथा, जेनेरिक का उपयोग करके और ParentClass
का विस्तार करने पर यहां कोई अर्थ नहीं होगा।
Comments
Post a Comment