2016-12-23 5 views
5

मैं इस तरह से खिन्न करने की कोशिश:(जावा डाउनकास्टिंग) मैंने इस उदाहरण में क्या गलत किया?

public static void main(String[] args){ 
    Animal a = new Animal(); 
    ((Cat)a).makePee(); 
} 

CatAnimal प्रदान करता है और दोनों एक ही विधि makePee() है। यदि मैं यह चलाने का प्रयास, संकलक मुझे पता चलता एक त्रुटि संदेश:

सूत्र में अपवाद "मुख्य" java.lang.ClassCastException: पशु Main.main (Main.java पर बिल्ली में ढाला नहीं जा सकते हैं: 6)

लेकिन ऐप लर्न जावा के उदाहरण में वास्तव में वैसे ही दिखाया गया है जैसा मैं करता हूं।

+2

यह एक बहुत ही अच्छी तरह से लिखित प्रश्न है, लेकिन "ऐप लर्न जावा का उदाहरण वास्तव में वैसे ही दिखाया गया है जैसा मैं करता हूं" बस सच नहीं हो सकता है। – Bathsheba

उत्तर

6

अच्छा, aCat का उदाहरण नहीं है। यदि आप एक Cat करने के लिए इसे खिन्न करना चाहते हैं, तो आप (बेशक, या कुछ वर्ग कि Cat फैली का एक उदाहरण) वास्तव में एक Cat बनाने की जरूरत:

Animal a = new Cat(); 

हालांकि, ध्यान दें कि यदि Animal वाणी makePee() और Cat इसे ओवरराइड करता है, डाउनकास्टिंग व्यर्थ है। आप बस a.makePee() पर कॉल कर सकते हैं, और Cat के कार्यान्वयन का उपयोग किया जाएगा (बशर्ते आपने वास्तव में ऊपर उल्लिखित Cat बनाया हो)।

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