जाहिर है एक असंबंधित इंटरफ़ेस करने के लिए एक वर्ग के कास्टिंग, यह एक संकलन त्रुटि में परिणाम है क्योंकि अध्यक्ष बिल्ली से संबंधित नहीं है:जावा:
class Chair {}
class Cat {}
class Test {
public static void main(String[] args) {
Chair chair = new Char(); Cat cat = new Cat();
chair = (Chair)cat; //compile error
}
}
क्यों है, तो यह है कि मैं केवल रन समय था जब में एक अपवाद मिल मैंने असंबद्ध इंटरफेस फर्नीचर के लिए एक बिल्ली संदर्भ डाला, जबकि संकलक स्पष्ट रूप से बता सकता है कि बिल्ली फर्नीचर लागू नहीं करता है?
interface Furniture {}
class Test {
public static void main(String[] args) {
Furniture f; Cat cat = new Cat();
f = (Furniture)cat; //runtime error
}
}
क्योंकि पॉलिमॉर्फिज्म रन टाइम पर होता है। –
लेकिन संकलक जानता है कि बिल्ली फर्नीचर लागू नहीं करती है, और वह रन टाइम पर नहीं बदल सकती है? मुझे एक साधारण बिंदु याद आ रहा है, लेकिन आपका जवाब वास्तव में – enp4yne
की मदद नहीं करता है। हालांकि बिल्ली सीधे फर्नीचर को लागू नहीं कर सकता है, बिल्ली के कुछ सुपरक्लास हो सकते हैं। और संकलक इस तरह के बदसूरत विवरण में खोदना नहीं चुनता है, क्योंकि इंटरफेस के नियम बहुत ही मजबूत हैं। (धन्यवाद, सूर्य।) और कोई सामान्य नियम नहीं है * एक अनिवार्य रनटाइम अपवाद (जैसे शून्य द्वारा विभाजित) का पता लगाने के लिए कंपाइलर की आवश्यकता है - यह एक "सेवा" प्रदान करता है जो यह प्रदान करता है। –