"I said 2 as we are checking if the object is a dog; as dog is the class with the bark method in it, if it is then we call it which will print out :s"
आपका तर्क सही है, लेकिन यह काम नहीं करता है।
जावा एक स्थैतिक टाइप की गई भाषा है जिसका अर्थ है कि किसी ऑब्जेक्ट का जवाब देने वाले तरीकों की वैधता संकलित समय पर सत्यापित की गई है।
आप चेक लगता है हो सकता है:
if(a instanceof Dog)
करना चाहेंगे, लेकिन वास्तव में ऐसा नहीं है। संकलक क्या घोषित प्रकार (इस मामले में पशु) के "इंटरफ़ेस" के खिलाफ जांच करता है। "इंटरफेस" पशु वर्ग पर घोषित विधियों से बना है।
छाल() विधि सुपर वर्ग पशु संकलक का कहना है के रूप में परिभाषित नहीं किया गया है: "अरे, वह काम नहीं करेंगे।"
यह उपयोगी है क्योंकि "कभी-कभी" हम, जबकि (बजाय उदाहरण के लिए barck (टाइप))
संकलक इस बारे में हमें चेतावनी नहीं नहीं है, तो आप इसे खोजने के लिए होता है "कोडिंग लिखने की त्रुटियों बनाने रनटाइम "और हमेशा एक स्पष्ट संदेश के साथ नहीं (उदाहरण के लिए आईई में जावास्क्रिप्ट" अप्रत्याशित वस्तु "जैसा कुछ कहता है)
फिर भी, जावा जैसी स्थिर टाइप की गई भाषा हमें कॉल को मजबूर करने की अनुमति देती है। इस मामले में यह "डाली" ऑपरेटर()
उपयोग कर रहा है इस
1. Animal a = new Dog();
2. if (a instanceof Dog){
3. Dog imADog = (Dog) a;
4. imADog.bark();
5. }
लाइन 3 अपने एक कुत्ता प्रकार को "कास्टिंग" कर रहे हैं की तरह है, इसलिए यदि छाल एक वैध संदेश है संकलक जाँच कर सकते हैं।
यह संकलक को यह निर्देश है कि "अरे मैं प्रोग्रामर हूं, मुझे पता है कि मैं क्या कर रहा हूं"। और कंपाइलर, चेक, ओके, कुत्ते, संदेश छाल() प्राप्त कर सकते हैं, आगे बढ़ें। फिर भी, अगर रनटाइम में जानवर कुत्ता नहीं है, तो रनटाइम अपवाद बढ़ जाएगा।
if(a instanceof Dog) {
((Dog)a).bark();
}
कि चलेंगे:
डाली भी तरह संक्षिप्त किया जा सकता है।
तो, सही जवाब 4:
"छाल करने के लिए कॉल एक संकलन समय त्रुटि का कारण बनता है" मुझे आशा है यह मदद करता है।
यहां प्रश्न को बदलने का सुझाव है "क्या सुपरक्लास के पास उनके उप-वर्गों के तरीके हैं?" या इसी के समान। –
चाल यह है कि आप यह सुनिश्चित करने के लिए जांच कर रहे हैं कि यह एक कुत्ता है, लेकिन कंपाइलर तार्किक कनेक्शन नहीं बनाता है कि ए.बार्क केवल कुत्ते होने पर ही बुलाया जाएगा। आपको छाल() कॉल के उद्देश्य के लिए कुत्ते की तरह व्यवहार करने के लिए संकलक को स्पष्ट रूप से बताना होगा, जैसे साइमन 622 ने नीचे कहा था। –
संयोग से, यही कारण है कि कई लोग "बतख टाइपिंग" पसंद करते हैं। कहें, पायथन, समकक्ष कोड को यह भी जांचने की आवश्यकता नहीं होगी कि 'ए' एक कुत्ता था या नहीं; जब तक उस लाइन पर पहुंचने पर 'ए' की 'छाल' विधि थी, तो यह काम करेगा। –