आमतौर पर डाउनकास्टिंग आप ऐसा करते हैं जब संकलित ज्ञान संकलक के बारे में कुछ ऐसा होता है जो आप जानते हैं (या कम से कम उम्मीद) की तुलना में कम विशिष्ट है।
आपके उदाहरण जैसी स्थितियों में, ऑब्जेक्ट को एक के रूप में बनाया गया था Appleऔर फिर उस ज्ञान को रेफरेंस को प्रकार के एक चर में संग्रहीत करके फेंक दिया गया था Fruit। फिर आप फिर से उसी रेफ़रेंस का उपयोग करना चाहते हैं Apple।
चूंकि जानकारी केवल "स्थानीय रूप से" फेंक दी गई थी, यकीन है, संकलक उस ज्ञान को बनाए रख सकता है parentजो वास्तव में एक है Apple, भले ही इसका घोषित प्रकार है Fruit।
लेकिन आमतौर पर ऐसा कोई नहीं करता। यदि आप एक बनाना चाहते हैं Appleऔर इसे एक के रूप में उपयोग करना चाहते हैं Apple, तो आप इसे एक Appleनहीं बल्कि एक चर में संग्रहित करते हैं Fruit।
जब आपके पास है Fruitऔर इसका उपयोग करना चाहते हैं, तो Appleइसका मतलब यह है कि आमतौर पर आपको Fruitकुछ साधनों के माध्यम से प्राप्त होता है जो आम तौर पर किसी भी प्रकार की वापसी कर सकता है Fruit, लेकिन इस मामले में आप जानते हैं कि यह एक था Apple। लगभग हमेशा आपने इसका निर्माण नहीं किया है, आपको इसे किसी अन्य कोड से पारित कर दिया गया है।
एक स्पष्ट उदाहरण है अगर मेरे पास एक parseFruitफ़ंक्शन है जो "सेब", "नारंगी", "नींबू", आदि जैसे तारों को उपयुक्त उपवर्ग में बदल सकता है; आम तौर पर हम सभी (और संकलक) इस फ़ंक्शन के बारे में जान सकते हैं कि यह किसी प्रकार का रिटर्न देता है Fruit, लेकिन अगर मैं फोन करता हूं, parseFruit("apple")तो मुझे पता है कि कॉल करने जा रहा है Appleऔर Appleविधियों का उपयोग करना चाह सकता है , इसलिए मैं डाउनकास्ट कर सकता हूं।
फिर से एक पर्याप्त स्मार्ट कंपाइलर यह पता लगा सकता है कि स्रोत कोड को इनलाइन करके parseFruitमैं यहां आ रहा हूं, क्योंकि मैं इसे कंटीन्यूअस कह रहा हूं (जब तक कि यह किसी अन्य मॉड्यूल में न हो और हमारे पास अलग संकलन हो, जैसे जावा में)। लेकिन आपको आसानी से यह देखने में सक्षम होना चाहिए कि संकलक सत्यापित करने के लिए गतिशील जानकारी से जुड़े अधिक जटिल उदाहरण अधिक कठिन (या असंभव भी हो सकते हैं!)।
यथार्थवादी कोड डाउनकास्ट में आमतौर पर जहां कंपाइलर सत्यापित नहीं कर सकता है कि डाउनकास्ट जेनेरिक विधियों का उपयोग करके सुरक्षित है, और इस तरह के सरल मामलों में नहीं है क्योंकि तुरंत एक ही प्रकार की सूचना को फेंकने के बाद उसी प्रकार की जानकारी जिसे हम डाउनकास्टिंग द्वारा वापस पाने की कोशिश कर रहे हैं।