2010-06-22 10 views
5

मैं के रूप में जावा में दो वर्गों है:ClassCastException

class A { 

int a=10; 

public void sayhello() { 
System.out.println("class A"); 
} 
} 

class B extends A { 

int a=20; 

public void sayhello() { 
System.out.println("class B"); 
} 

} 

public class HelloWorld { 
    public static void main(String[] args) throws IOException { 

B b = (B) new A(); 
    System.out.println(b.a); 
    } 
} 
संकलन समय यह त्रुटि नहीं देता है पर

, लेकिन क्रम में यह एक त्रुटि प्रदर्शित करता है: सूत्र में "मुख्य" java.lang.ClassCastException अपवाद: एक जो B का एक उदाहरण के लिए एक संदर्भ हो सकता है, इसलिए डाली अनुमति दी है - बी को

उत्तर

16

यह इसलिए होता है क्योंकि संकलन समय new A() की अभिव्यक्ति प्रकार A है ढाला नहीं जा सकता।

निष्पादन समय पर, संदर्भ केवल A के उदाहरण के लिए है - इसलिए यह कास्ट विफल हो जाता है। Aका एक उदाहरणB का उदाहरण नहीं है। कास्ट केवल तभी काम करता है जब संदर्भ वास्तव में B या उप-वर्ग के उदाहरण का संदर्भ देता है।

7

बी ए बढ़ाता है और इसलिए बी को ए के रूप में डाला जा सकता है हालांकि रिवर्स सत्य नहीं है। ए का एक उदाहरण बी

यदि आप जावास्क्रिप्ट दुनिया से आ रहे हैं तो आप इसे काम करने की उम्मीद कर सकते हैं, लेकिन जावा में "duck typing" नहीं है।

1

सबसे पहले इस तरह यह कार्य करें:

A aClass = new B(); 

अब आप अपने स्पष्ट कास्टिंग करते हैं, यह काम करेगा:

B b = (B) aClass; 

यही मतलब की स्पष्ट कास्टिंग अंतर्निहित कास्टिंग की जरूरत है चाहिए। इसी तरह स्पष्ट कास्टिंग की अनुमति नहीं है।

0

एक बार जब आप एक बच्चे वर्ग की वस्तु बनाते हैं तो आप इसे सुपर क्लास में टाइपकास्ट नहीं कर सकते हैं।

Dog dog = new Dog(); 
Animal animal = (Animal) dog; //works 

गलत Typecast: कुत्ता बच्चे वर्ग जो पशु (सुपर क्लास) से विरासत

सामान्य Typecast है: बस नीचे दिए गए उदाहरणों

अनुमान पर गौर

Animal animal = new Animal(); 
Dog dog = (Dog) animal; //Doesn't work throws class cast exception 
Typecast नीचे

वास्तव में काम करता है:

Dog dog = new Dog(); 
Animal animal = (Animal) dog; 
dog = (Dog) animal; //This works 

एक संकलक वाक्य रचना यह है की जाँच करता है रन टाइम सामग्री वास्तव में

सत्यापित कर रहे हैं के दौरान
संबंधित मुद्दे