स्थैतिक तरीकों के साथ, ओवरराइड तंत्र का उचित नियंत्रण प्रदान करने के लिए कोई वस्तु नहीं है।
सामान्य वर्ग / उदाहरण आभासी विधि तंत्र ओवरराइड्स के बारीक ट्यून्ड नियंत्रण के लिए अनुमति देता है: प्रत्येक वास्तविक वस्तु बिल्कुल एक वर्ग का एक उदाहरण है। वह वर्ग ओवरराइड्स के व्यवहार को निर्धारित करता है; इसे हमेशा वर्चुअल तरीकों पर पहली दरार मिलती है। यह इसके कार्यान्वयन के लिए सही समय पर मूल विधि को कॉल करने का विकल्प चुन सकता है। प्रत्येक माता-पिता विधि फिर अपनी मूल विधि को लागू करने के लिए अपनी बारी भी आती है। इसके परिणामस्वरूप माता-पिता के आक्रमण का एक अच्छा झरना होता है, जो कोड के पुन: उपयोग की धारणाओं में से एक को पूरा करता है जिसे ऑब्जेक्ट ओरिएंटेशन के लिए जाना जाता है। (यहां आधार / सुपर क्लास के कोड का अपेक्षाकृत जटिल तरीके से पुन: उपयोग किया जा रहा है, OOP में कोड पुन: उपयोग की एक अन्य रूढ़िवादी धारणा बस एक ही वर्ग के कई ऑब्जेक्ट हैं।)
बेस क्लास विभिन्न उपवर्गों द्वारा पुन: उपयोग कर सकते हैं, और प्रत्येक आराम से सह-अस्तित्व में आ सकते हैं। प्रत्येक वर्ग जिसका उपयोग वस्तुओं को त्वरित करने के लिए किया जाता है, अपने स्वयं के व्यवहार को शांति से और साथ ही साथ दूसरों के साथ मिलकर। क्लाइंट के पास यह नियंत्रण होता है कि वह कौन सा व्यवहार चाहता है और जब किसी वस्तु का तुरंत उपयोग करने के लिए किस वर्ग का चयन करता है और वांछित के रूप में दूसरों के पास जाता है।
(यह एक सही तंत्र नहीं है, क्योंकि कोई हमेशा उन क्षमताओं की पहचान कर सकता है जो समर्थित नहीं हैं, निश्चित रूप से, यही वजह है कि फैक्टरी विधि और निर्भरता इंजेक्शन जैसे पैटर्न शीर्ष पर स्तरित हैं।)
इसलिए, अगर हमें कुछ और बदले बिना स्टैटिक्स के लिए एक ओवरराइड क्षमता बनाना है, तो हमें ओवरराइड को ऑर्डर करने में कठिनाई होगी। ओवरराइड की प्रयोज्यता के लिए एक सीमित संदर्भ को परिभाषित करना कठिन होगा, इसलिए आपको ऑब्जेक्ट के साथ स्थानीय रूप से अधिक के बजाय वैश्विक रूप से ओवरराइड मिलेगा। व्यवहार को स्विच करने के लिए कोई उदाहरण ऑब्जेक्ट नहीं है। इसलिए, अगर किसी ने किसी अन्य वर्ग द्वारा ओवरराइड की गई स्थैतिक विधि को लागू किया है, तो क्या ओवरराइड को नियंत्रण मिलना चाहिए या नहीं? यदि कई ऐसे ओवरराइड हैं, जिन्हें सबसे पहले नियंत्रित किया जाता है? दूसरा? उदाहरण के साथ वस्तु ओवरराइड करती है, इन सवालों के सभी सार्थक और सुविचारित उत्तर हैं, लेकिन स्टैटिक्स के साथ वे नहीं करते हैं।
स्टैटिक्स के लिए ओवरराइड काफी हद तक अराजक होगा, और, इस तरह की चीजें पहले भी की जा चुकी हैं।
उदाहरण के लिए, मैक ओएस सिस्टम 7 और पूर्व में ऑपरेटिंग सिस्टम से पहले एप्लिकेशन-निर्मित सिस्टम कॉल का नियंत्रण प्राप्त करके सिस्टम को विस्तारित करने के लिए एक ट्रेप पैचिंग तंत्र का उपयोग किया गया था। आप सिस्टम कॉल पैच टेबल को फ़ंक्शन पॉइंटर्स की एक सरणी के रूप में सोच सकते हैं, उदाहरण के ऑब्जेक्ट के लिए एक वाइबेट की तरह , सिवाय इसके कि यह एक वैश्विक तालिका थी।
इस वजह से प्रोग्रामर के लिए अनकहा दुःख होता है क्योंकि ट्रैप पैचिंग की अनियंत्रित प्रकृति। जो कोई भी अंतिम रूप से जीता गया जाल को पैच करना चाहता था, भले ही वे नहीं चाहते थे। जाल का प्रत्येक पैचर एक प्रकार की मूल कॉल क्षमता के लिए पिछले जाल मूल्य को कैप्चर करेगा, जो बेहद नाजुक था। ट्रैप पैच को हटाते हुए, कहें कि जब आपको सिस्टम कॉल के बारे में जानने की कोई आवश्यकता नहीं थी, तो इसे खराब रूप माना गया क्योंकि आपके पास अपने पैच को हटाने के लिए वास्तव में आवश्यक जानकारी नहीं थी (यदि आपने ऐसा किया तो आप किसी भी अन्य पैच को अनचेक कर सकते हैं जो इसके बाद हुआ था आप)।
यह कहना नहीं है कि स्टैटिक्स के ओवरराइड के लिए एक तंत्र बनाना असंभव होगा, लेकिन मैं शायद इसके बजाय क्या करना पसंद करूंगा, स्थैतिक क्षेत्रों और स्थैतिक तरीकों को उदाहरण क्षेत्रों में और मेटाक्लासेस की आवृत्ति विधियों में बदल दें, ताकि सामान्य वस्तु ओरिएंटेशन तकनीक तब लागू होगी। ध्यान दें कि ऐसी प्रणालियाँ हैं जो ऐसा करती हैं: CSE 341: स्मालटाक क्लासेस और मेटाक्लासेस ; यह भी देखें: जावा के स्टैटिक के समतुल्य लघुतम क्या है?
मैं यह कहने की कोशिश कर रहा हूं कि इसे बेहतर तरीके से काम करने के लिए आपको कुछ गंभीर भाषा फीचर डिज़ाइन करने होंगे। एक उदाहरण के लिए, एक भोली दृष्टिकोण किया गया था, साथ में लंगड़ा था, लेकिन बहुत समस्याग्रस्त था, और यकीनन (अर्थात मैं तर्क देता हूं) एक अमूर्त और कठिन अमूर्त उपयोग प्रदान करके वास्तु दोषपूर्ण।
जब तक आप स्टैटिक ओवरराइड्स फीचर को अच्छी तरह से काम करने के लिए तैयार नहीं कर लेते, तब तक आपने कुछ प्रकार के मेटाक्लासेस का आविष्कार कर लिया होगा, जो कि क्लास-आधारित विधियों के लिए OOP का एक स्वाभाविक विस्तार है। इसलिए, ऐसा नहीं करने का कोई कारण नहीं है - और कुछ भाषाएं वास्तव में ऐसा करती हैं। शायद यह एक फ्रिंज आवश्यकता से थोड़ा अधिक है जो कई भाषाओं में नहीं करने के लिए चुनते हैं।
self
पॉइंटर पास करते हैं जो क्लास को इंगित करता है और क्लास के एक उदाहरण को नहीं।