2011-08-23 15 views
9

किसी को भी मुझे इस कोड है, तो बता सकते हैं:@override एनोटेशन

public class OvTester { 
    @Override 
    public int hashCode() { 
     return toString().hashCode(); 
    } 
} 

निर्धारित करता है OvTester कक्षा में toString विधि ओवरराइड करता है कि अपनी सुपर क्लास में toString विधि।

मैं जानना चाहता हूं कि यह सच है, और यदि ऐसा है तो यह कैसे काम करता है?

यदि यह सच नहीं है, तो यह सही है:

"OvTester में hashCode() विधि अपने सुपर क्लास में एक ही नाम विधि ओवरराइड चाहिए"

?

यदि यह सही नहीं है तो सही क्या है?

+1

आपकी कक्षा में सुपरक्लास नहीं लगता है, इसलिए यह असफल हो जाएगा। – Sirs

+9

बेशक इसमें एक सुपरक्लास है - 'java.lang.Object' – Bozho

उत्तर

13

विधि अधिभावी होता है जब आप एक sublcass में एक ही हस्ताक्षर के साथ एक विधि को फिर से परिभाषित असफल हो जायेगी।

तो यहाँ आप hashCode() अधिभावी कर रहे हैं, नहीं toString()

@Override एनोटेशन वैकल्पिक है (लेकिन एक बहुत ही अच्छी बात है) और पता चलता है कि इस अधिभावी होने की उम्मीद है। यदि आप कुछ गलत वर्तनी करते हैं या गलत टाइप किए गए पैरामीटर हैं, तो संकलक आपको चेतावनी देगा।

तो हाँ, 2 वाक्य सही है (और इस मामले में सुपर क्लास java.lang.Object है)

2

मैं अगर यह सच है जानना चाहते हैं, और यदि हां यह कैसे काम करता है?

नहीं, यह बिल्कुल सही नहीं है।

@Overrides एनोटेशन कहते हैं, "इस विधि सुपर वर्ग में एक ही नाम साथ विधि ओवरराइड करता है" कि।

इस मामले में hashCodeOvTesterhashCodeObject में ओवरराइड करता है।

अगर इसके सच नहीं है, तो यह सही है: OvTester में hashCode() विधि अपने सुपर क्लास में एक ही नाम विधि ओवरराइड चाहिए?

हां। यह ठीक है कि यह कैसे काम करता है।


एक विधि किसी और किसी अन्य विधि (लगभग क्या आप अपने उदाहरण में मिल गया) कॉल करने के लिए की तुलना में कुछ भी नहीं है जब यह आमतौर पर एक delegate method के रूप में जाना जाता है। शायद यही वह है जिसे आप भ्रमित कर रहे हैं।

0

नहीं, इसका मतलब यह होगा कि हैशकोड() विधि ओवरराइड हो रही है। कंपाइलर संकलन समय पर जांच करेगा कि हैशकोड() वास्तव में एक विधि है (उस हस्ताक्षर के साथ) जिसे ओवरराइड किया जा रहा है।

0

@Override केवल कार्यान्वयनकर्ता विधि को ओवरराइड करते समय संकलित समय जांच है।

अगर आप

@Override 
public void equals(Object ob){ 

} 

अधिरोहण करने का प्रयास यह संकलन करने

1

@Override एनोटेशन "निर्धारित" नहीं है कुछ भी। यह केवल एक ध्वज है जो संकलक को त्रुटि उत्पन्न करने के लिए कहता है यदि एनोटेटेड विधि सुपरक्लास या इंटरफ़ेस विधि को ओवरराइड नहीं कर रही है। यह डेवलपर्स के लिए उनकी सैनिटी बनाए रखने में मदद करने के लिए एक उपकरण है, और कुछ भी नहीं।

इस विशिष्ट मामले में, यह बस ध्यान देने योग्य बात है कि OvTester में hashCode() कार्यान्वयन hashCode() विधि Object में परिभाषित अधिभावी है। इसमें toString() के साथ कुछ भी नहीं है, और विधि से सुपरक्लास की toString() विधि को कॉल करना toString() ओवरराइड करने जैसा ही नहीं होगा।

क्या यह सच है? ओवीटेस्टर में हैशकोड() विधि को अपने सुपर क्लास में उसी नाम विधि को ओवरराइड करना होगा?

कि वास्तव में सच है, इस अर्थ में कि एनोटेशन अगर वहाँ नहीं है सुपर क्लास कि एनोटेट विधि के हस्ताक्षर से मेल खाता है में एक overridable hashCode() विधि संकलक एक त्रुटि को बढ़ाने के लिए कारण होगा।

0

वह कोड hashCode() विधि को Object कक्षा के आधार पर ओवरराइड करता है। toString() विधि अभी भी मूल कार्यान्वयन है।

toString() ओवरराइड करने के लिए, आप निम्न है:

@Override 
public String toString() { 
    //Your own toString() implememntation here 
} 

जब तक बच्चे को कक्षा में विधि माता पिता कक्षा में विधि, और में विधि के रूप में एक ही नाम और हस्ताक्षर के रूप में पेरेंट क्लास नहीं निजी इसे ओवरराइड किया जाएगा (एनोटेशन @Override की उपस्थिति के बावजूद)

संबंधित मुद्दे