नहीं; जावा में, स्थैतिक विधियों को उसी तरह विरासत में नहीं मिला है जैसे गैर स्थैतिक विधियां हैं। एक उप-वर्ग में इसके सुपरक्लास की स्थैतिक विधियां होंगी, लेकिन जब वे निष्पादित होंगी, तो वे सुपरक्लास के संदर्भ में निष्पादित करेंगे - इसलिए कोई कीवर्ड नहीं है जिसका उपयोग यह पता लगाने के लिए किया जा सकता है कि किस वर्ग को विधि के माध्यम से बुलाया गया था।
संपादित करें: एक और सटीक फॉर्मूलेशन यह है कि स्थैतिक तरीकों को विरासत में नहीं मिला है; हालांकि, भाषा हमें स्थिर विधि Superclass.foo()
पर कॉल करने के लिए Subclass.foo()
का उपयोग करने की अनुमति देती है।
जो आप प्राप्त करना चाहते हैं उसके आधार पर, आप Abstract Factory pattern को लागू करना चाहते हैं। यह लगभग इस तरह जाता है:
public abstract class Superclass {}
public class SubclassA extends Superclass {}
public class SubclassB extends Superclass {}
public abstract class AbstractFactory {
public abstract Superclass Create();
}
public class FactoryA extends AbstractFactory {
public Superclass Create() {
return new SubclassA();
}
}
public class FactoryB extends AbstractFactory {
public Superclass Create() {
return new SubclassB();
}
}
अब, आप उदा। एक ऐसी विधि बनाएं जो AbstractFactory
लेती है (जो वास्तव में, FactoryA
या FactoryB
होगी)। इस ऑब्जेक्ट पर Create()
पर कॉल करने से SubclassA
या SubclassB
उत्पन्न होगा।
संपादित करें: निश्चित संकलन त्रुटि (कारखानों को AbstractFactory
का विस्तार करने के लिए भूल गए)।
स्रोत
2011-05-26 22:26:40
@Ross: शायद - आपको कौन से संदर्भों में उदाहरण बनाने की आवश्यकता है (आपको केवल उप-वर्ग कन्स्ट्रक्टर का उपयोग करने के बजाय उस विधि की आवश्यकता क्यों है)? क्या आपको कभी भी बिना किसी जानकारी के उदाहरण बनाने की आवश्यकता है कि आपको किस प्रकार की कक्षा की आवश्यकता होगी? यदि ऐसा है, तो सार फैक्टरी पैटर्न के बारे में कोड नमूने के लिए अद्यतन देखें; अन्यथा, वह पैटर्न शायद अधिक से अधिक रास्ता है। :-) –
मुझे समझ में आया कि पूरा बिंदु चीज गतिशील बनाना है। – vbence
@tada: कृपया समझाएं; मैंने खुद से विरोधाभास कहाँ किया? (मैंने सार फैक्ट्री पैटर्न का सुझाव दिया क्योंकि मैंने यही सोचा था कि वह हासिल करना चाहता था, लेकिन फिर मुझे एहसास हुआ कि शायद उसके पास कुछ और इरादा था, इसलिए मैं बस यह स्पष्ट करना चाहता था कि यह पैटर्न केवल कुछ स्थितियों में उपयोगी है या आप हैं कुछ और के बारे में सोच रहे हो?) –