ये बहुत अलग भाषाएं हैं, खासकर इस क्षेत्र में। मान लीजिए कि आपके पास एक वर्ग है। इस मामले में, हम इसे एक उपयोगकर्ता नियंत्रण बना देंगे, एक टेक्स्टबॉक्स जैसा कुछ। इसे UIControl कहें। अब हम इसे दूसरी कक्षा में रखना चाहते हैं। इस मामले में, चूंकि हम अपने उदाहरण के लिए UI का उपयोग कर रहे हैं, इसलिए हम इसे क्लेवरपैनल क्लास कहेंगे। हमारा क्लेवरपैनल उदाहरण विभिन्न कारणों से अपने यूआईसीओंट्रोल उदाहरण के बारे में जानना चाहता है। यह कैसे करना है?
सी # में, मूल दृष्टिकोण विभिन्न घटनाओं की जांच करना है, ऐसे तरीकों की स्थापना करना जो प्रत्येक दिलचस्प घटना को ट्रिगर करने पर निष्पादित करेंगे। जावा में, जिसमें घटनाओं की कमी होती है, सामान्य समाधान एक वस्तु को विभिन्न "घटना" से निपटने के तरीकों को पास करने के लिए होता है, एक UIControl विधि:
boolean stillNeedIt = ... ;
uiControl.whenSomethingHappens( new DoSomething() {
public void resized( Rectangle r ) { ... }
public boolean canICloseNow() { return !stillNeedIt; }
public void closed() { ... }
...
} );
अब तक, C # और Java के बीच का अंतर गहरा नहीं है। हालाँकि, हमारे पास DoSomething इंटरफ़ेस है जिसकी C # में आवश्यकता नहीं है। इसके अलावा, इस इंटरफ़ेस में बहुत सी विधियाँ शामिल हो सकती हैं जिनकी अधिकांश समय आवश्यकता नहीं होती है। C # में, हम केवल उस ईवेंट को हैंडल नहीं करते हैं। जावा में, हम एक वर्ग बनाते हैं जो सभी इंटरफ़ेस विधियों, DoSomethingAdapter के लिए एक अशक्त कार्यान्वयन प्रदान करता है। अब हम DoSomething को DoSomethingAdapter की जगह लेते हैं और हमें एक स्वच्छ संकलन के लिए किसी भी तरीके को लिखने की आवश्यकता नहीं है। हम कार्यक्रम को सही तरीके से पूरा करने के लिए जरूरी तरीकों को खत्म करते हैं। इसलिए हमें अंत में एक इंटरफेस की जरूरत है और जावा में इनहेरिटेंस का उपयोग करके मिलान करने के लिए कि हमने C # में घटनाओं के साथ क्या किया।
यह एक उदाहरण है, एक व्यापक चर्चा नहीं है, लेकिन यह मूल बातों को बताता है कि जावा में सी # के विपरीत इतना वंशानुक्रम क्यों है।
अब, जावा इस तरह से काम क्यों करता है? लचीलापन। जब वस्तु को पास किया गया था तबसेहेलिंगहैपेंस क्लीवरपैनल को पूरी तरह से कहीं और से पारित किया जा सकता था। यह कुछ हो सकता है कि कई क्लेवरपैनल उदाहरणों को अपने यूआईसीओंट्रोल जैसी वस्तुओं को पास करना चाहिए ताकि कहीं क्लीवरविंड ऑब्जेक्ट को सहायता मिल सके। या UIControl इसे अपने घटकों में से एक को सौंप सकता है ।
इसके अलावा, एक एडाप्टर के बजाय कहीं कहीं DoSomething कार्यान्वयन हो सकता है जिसमें कोड की हजारों लाइनें हैं। हम का एक नया उदाहरण बना सकते हैं कि और इसे पारित। हमें एक विधि को ओवरराइड करने की आवश्यकता हो सकती है। जावा में एक आम चाल के लिए एक बड़े वर्ग के साथ एक विधि है:
public class BigClass implements DoSomething {
...many long methods...
protected int getDiameter() { return 5; }
}
फिर क्लीवरप्लानेल में:
uiControl.whenSomethingHappens( new BigClass() {
@Override
public int getDiameter() { return UIPanel.currentDiameter; }
} );
ओपन सोर्स जावा प्लेटफॉर्म बहुत कुछ करता है, जो प्रोग्रामर को और अधिक करने के लिए प्रेरित करता है - दोनों क्योंकि वे इसे एक उदाहरण के रूप में अनुसरण करते हैं और बस इसका उपयोग करने के लिए। मुझे लगता है कि भाषा का मूल डिजाइन सूर्य की रूपरेखा डिजाइन के पीछे है और जावा प्रोग्रामर के पीछे तकनीक का उपयोग करते समय फ्रेमवर्क का उपयोग नहीं करना है।
जावा में फ्लाई पर एक क्लास बनाना आसान है। वर्ग, अनाम या नामांकित, को केवल एक विधि में गहरे दफन कोड के एक छोटे से ब्लॉक में संदर्भित किया जाना चाहिए। इसे पूरी तरह से नया बनाया जा सकता है या बहुत बड़े, मौजूदा वर्ग के मामूली संशोधनों के द्वारा। (और मौजूदा वर्ग अपनी फ़ाइल में शीर्ष-स्तर का हो सकता है, या शीर्ष-स्तरीय कक्षा में नेस्टेड हो सकता है, या केवल कोड के एक ही ब्लॉक में परिभाषित किया जा सकता है)। नए वर्ग के उदाहरण में सभी ऑब्जेक्ट के डेटा तक पूर्ण पहुंच हो सकती है। और नया उदाहरण पारित किया जा सकता है और पूरे कार्यक्रम में उपयोग किया जा सकता है, जो उस वस्तु का प्रतिनिधित्व करता है जिसने इसे बनाया है।
(एक तरफ के रूप में, ध्यान दें कि यहाँ उत्तराधिकार का एक बड़ा उपयोग - जैसा कि जावा में अन्य स्थानों में है - बस DRY उद्देश्यों के लिए है। यह विभिन्न वर्गों को एक ही कोड का पुन: उपयोग करने देता है। ध्यान दें कि जावा में वंशानुक्रम की सहजता भी इसे प्रोत्साहित करती है। )
फिर, यह एक व्यापक चर्चा नहीं है; मैं यहां सिर्फ सतह को खुरच रहा हूं। लेकिन हां, जावा और C # के बीच इनहेरिटेंस का उपयोग कैसे किया जाता है , इसमें एक चौंकाने वाला अंतर है। वे इस संबंध में, बहुत अलग भाषाएं हैं। यह आपकी कल्पना नहीं है।