जब एक इंटरफेस रेफरेंस एक कार्यान्वयन ऑब्जेक्ट को रखता है, तो केवल इंटरफेस में घोषित सदस्य ही पहुंच योग्य होते हैं। डिराइव्ड क्लास-विशिष्ट सदस्यों तक पहुंचने के लिए, रेफरेंस को कास्ट करना होगा।
समस्या
interface Sample {
void demoMethod1();
}
public class InterfaceExample implements Sample {
public void display() { // इंटरफेस में नहीं
System.out.println("Sub class method");
}
public void demoMethod1() {
System.out.println("Demo method-1");
}
public static void main(String args[]) {
Sample obj = new InterfaceExample();
obj.demoMethod1(); // OK
obj.display(); // संकलन त्रुटि: इंटरफेस में display() नहीं
}
}समाधान: कास्टिंग
public static void main(String args[]) {
Sample obj = new InterfaceExample();
obj.demoMethod1();
((InterfaceExample) obj).display(); // कास्ट करके एक्सेस
}आउटपुट
This is demo method-1 This is a method of the sub class
सर्वोत्तम अभ्यास
- कास्टिंग से पहले
instanceofजांचें ताकिClassCastExceptionसे बचा जा सके। - बेहतर डिजाइन: इंटरफेस में सामान्य संचालन परिभाषित करें; कार्यान्वयन-विशिष्ट सदस्यों से बचें।