2013-01-16 14 views
7

संभव डुप्लिकेट:
Is there a ‘new’ modifier for methods in Java?क्या सी # में 'नया' संशोधक के बराबर जावा है?

सी # में, एक उपवर्ग की विधि modified as new हो सकता है।

बेस क्लास से विरासत में प्राप्त सदस्य को स्पष्ट रूप से छिपाने के लिए नए संशोधक का एक उपयोग।

क्या जावा में एक ही कीवर्ड है?

+5

संक्षिप्त उत्तर: नहीं –

+2

शायद 'नया' का उपयोग सी # से टालना है। शायद यह फिर से डिजाइन करना बेहतर होगा? – horgh

उत्तर

4

सं

सी # आप को छुपाने के नए का उपयोग में/शैडो एक आधार वर्ग के गैर आभासी कार्य करता है। आपको इस कीवर्ड को सी # में चाहिए, क्योंकि आप गैर-आभासी कार्यों को ओवरराइड नहीं कर सकते हैं।

जावा में, सभी फ़ंक्शन डिफ़ॉल्ट रूप से आभासी होते हैं, इसलिए आप उन्हें हमेशा ओवरराइड कर सकते हैं और नए जैसे कीवर्ड की आवश्यकता नहीं है।

उम्मीद है कि इससे मदद मिलती है।

+1

(और फिर कोई जाता है और एक विधि 'अंतिम' बनाता है ..) उदाहरण के लिए –

2

सी # में, किसी भी विधि जिसे आप बेसक्लेज़ से ओवरराइड करना चाहते हैं, abstract, virtual या override स्वयं होना चाहिए। नया कीवर्ड वास्तव में ओवरराइड नहीं करता है। यह विभिन्न प्रकार के काम करता है:

यदि आप नए-कीवर्ड के साथ एक फ़ंक्शन घोषित करते हैं, तो बेस-क्लास के फ़ंक्शन को छुपाते हैं, तो यह कार्यान्वयन केवल तभी उपयोग किया जाएगा जब आपके पास एक ही बच्चे के प्रकार का ऑब्जेक्ट हो। उदाहरण:

class TopClass 
    { 
     public String getHello() 
     { 
      return "Hello"; 
     } 

     public virtual String getWorld() 
     { 
      return "World"; 
     } 
    } 

    class ChildClass : TopClass 
    { 
     public new String getHello() 
     { 
      return "Hi"; 
     } 

     public override string getWorld() 
     { 
      return "Earth"; 
     } 
    } 

यह परिणाम होगा में: अधिभावी विस्तार वर्ग एक माता-पिता ClassType लिए casted है, तो:

 TopClass tc = new TopClass(); 
     Console.WriteLine(tc.getHello() + " " + tc.getWorld()); // Hello World 

     ChildClass cc = new ChildClass(); 
     Console.WriteLine(cc.getHello() + " " + cc.getWorld()); // Hi Earth 

     TopClass tc2 = new ChildClass(); 
     Console.WriteLine(tc2.getHello() + " " + tc2.getWorld()); // Hello Earth 

     Console.ReadLine(); 

आप एक विशिष्ट ओवरराइड की तुलना में नए कीवर्ड का अंतर देख सकते हैं फ़ंक्शंस (दुनिया के बदले पृथ्वी लौटते हैं) अभी भी प्रभावी होंगे, जबकि नए फ़ंक्शन नहीं हैं (हैलो के बजाए हाय वापस नहीं किया गया है)।

+0

+1। जेनेरिक (टॉपक्लास) प्रकार पर डालने पर बेसक्लस विधियों के बारे में जानना अच्छा होता है। – Destrictor