जैसा कि सभी ने कहा है, बीएम विधि 2 बुलाया जाता है।
((A)B).Method2();
B.Method2();
ये दोनों फोन करेगा B.Method1(), क्योंकि यह ठीक से ओवरराइड की गई थी: यहाँ जानकारी के कुछ अन्य टुकड़े, ताकि आप समझ क्या हो रहा है है। ए के विधि 1 को कॉल करने के लिए, एक आधार होना चाहिए। बी से बना Method1() कॉल (जो प्रायः बीएम विधि 1 के कार्यान्वयन में हमेशा नहीं किया जाता है)।
अगर, हालांकि, बी इस तरह से परिभाषित किया गया था:
class B:A {
new public void Method1() { }
... तो एक के Method1() क्योंकि Method1 वास्तव में अधिरोहित नहीं किया गया था कहा जाता है, यह छिपा हुआ था और दूर tucked बहुरूपता के नियमों के बाहर। आम तौर पर, यह आमतौर पर करने के लिए एक बुरी चीज है। हमेशा नहीं, लेकिन सुनिश्चित करें कि आप अच्छी तरह से जानते हैं कि आप क्या कर रहे हैं और आप ऐसा क्यों कर रहे हैं यदि आप कभी ऐसा कुछ करते हैं।
फ्लिप पक्ष पर, नया का उपयोग करके इस तरह से कुछ दिलचस्प साक्षात्कार प्रश्न भी मिलते हैं।
आप इसे अभी क्यों नहीं देखते हैं? –
@ जेफ: इससे कोई फर्क नहीं पड़ता; B.Method1() अभी भी फ़ंक्शन है जिसे कॉल किया जाता है। – apandit
मुझे लगता है कि वीएमटी (विटुअल विधि तालिका) के अनुसार ओवरराइड विधि का सबसे हालिया संस्करण कहलाता है। तो यह बीएम विधि 1() हो सकता है – TalentTuner