विभिन्न स्टैक ओवरफ्लो प्रश्नों और दूसरों के कोड को पढ़ते समय, कक्षाओं को कैसे डिज़ाइन किया जाए, इस बारे में आम सहमति। इसका मतलब यह है कि जावा और सी # में डिफ़ॉल्ट रूप से सब कुछ निजी है, फ़ील्ड अंतिम हैं, कुछ तरीके अंतिम हैं, और कभी-कभी कक्षाएं भी अंतिम हैं ।
इसके पीछे विचार कार्यान्वयन विवरणों को छिपाना है, जो एक बहुत अच्छा कारण है। हालांकि protectedअधिकांश ओओपी भाषाओं और बहुरूपता के अस्तित्व के साथ , यह काम नहीं करता है।
जब भी मैं किसी वर्ग में कार्यक्षमता जोड़ना या बदलना चाहता हूं, तो मैं आमतौर पर निजी और अंतिम रूप से हर जगह बाधा डालता हूं। यहां कार्यान्वयन विवरण मामले: आप कार्यान्वयन को ले रहे हैं और इसे विस्तारित कर रहे हैं, पूर्ण रूप से जानते हुए कि परिणाम क्या हैं। हालाँकि, क्योंकि मैं निजी और अंतिम क्षेत्रों और विधियों तक पहुँच प्राप्त नहीं कर सकता, मेरे पास तीन विकल्प हैं:
- कक्षा का विस्तार न करें, बस उस समस्या के आसपास काम करें जिससे कोड अधिक जटिल हो
- पूरी कक्षा को कॉपी और पेस्ट करें, कोड पुन: प्रयोज्य की हत्या
- परियोजना को कांटा
वे अच्छे विकल्प नहीं हैं। protectedइसका समर्थन करने वाली भाषाओं में लिखी जाने वाली परियोजनाओं में उपयोग क्यों नहीं किया जाता है? कुछ परियोजनाएं स्पष्ट रूप से अपनी कक्षाओं से विरासत में लेने पर प्रतिबंध क्यों लगाती हैं?