शायद क्योंकि इसे विस्तारित करना और इसके कुछ तरीकों को ओवरराइट करना शायद इसे तोड़ देगा। और विधियों को ओवरराइट करना आसान बनाने के लिए आंतरिक कार्यों में से अधिकांश का खुलासा होगा, इसलिए यदि भविष्य में वे उन (प्रदर्शन या कुछ अन्य कारणों से) को बदलने का निर्णय लेते हैं, तो उनके लिए कक्षाओं को तोड़ने के बिना कक्षा को बदलना कठिन होगा जो इसे बढ़ाता है।
उदाहरण के लिए, कक्षा में निम्न विधि पर विचार करें:
public boolean nextBoolean() {
clearCaches();
return Boolean.parseBoolean(next(boolPattern()));
}
आप क्योंकि आप (जो भी कारण के लिए) एक 'सही' बूलियन का मूल्यांकन 'भयानक' बनाना चाहते इस अधिलेखित करने के लिए चाहते हैं। यदि आप इसे ओवरराइट करते हैं, तो आप super.nextBoolean() को कॉल नहीं कर सकते हैं, क्योंकि इससे डिफ़ॉल्ट तर्क का उपयोग करके अगला टोकन उपभोग होगा। लेकिन अगर आप super.nextBoolean() को कॉल नहीं करते हैं, तो clearCaches() को कॉल नहीं किया जाएगा, संभवतः दूसरे को ओवरराइट किए गए तरीकों को तोड़ना नहीं होगा। आप clearCaches() को कॉल नहीं कर सकते क्योंकि यह निजी है। अगर उन्होंने इसे संरक्षित किया है, लेकिन फिर एहसास हुआ कि यह एक प्रदर्शन समस्या पैदा कर रहा है, और एक नया कार्यान्वयन चाहता था जो अब कैश को साफ़ नहीं करता है, तो वे आपके ओवरराइट किए गए कार्यान्वयन को तोड़ सकते हैं जो अभी भी उसे कॉल करेगा।
तो मूल रूप से ऐसा इसलिए है कि वे कक्षा के अंदर छिपे हुए हिस्सों को आसानी से बदल सकते हैं, जो काफी जटिल हैं, और एक टूटी हुई बाल कक्षा (या एक कक्षा जिसे आसानी से टूटा जा सकता है) बनाने से आपको बचाया जा सकता है।
स्रोत
2010-09-23 09:39:41
यदि यह प्रदर्शन-संबंधित है, तो क्या यह सिद्धांत में गैर-प्रदर्शन स्कैनर को विस्तारित करना संभव होगा? मेरा तर्क कहता है कि यह होना चाहिए? – Roalt