निम्न उदाहरण में कॉलिंग:एक निर्माता से एक ओवरराइड विधि
class Base {
int x=10;
Base() {
show();
}
void show() {
System.out.print ("Base Show " +x + " ");
}
}
class Child extends Base {
int x=20;
Child() {
show();
}
void show() {
System.out.print("Child Show " + x +" ") ;
}
public static void main(String s[ ]) {
Base obj = new Child();
}
}
- क्यों के रूप में नीचे
Child Show 0 Child Show 20
- मैंने सोचा था कि कंस्ट्रक्टर्स कर सकते हैं दिखाया उत्पादन होता है एक बार इसके सुपर कन्स्ट्रक्टर के बाद केवल इंस्टेंस सदस्यों तक पहुंचें एस पूरा हो गया है
मुझे लगता है कि यहां क्या हो रहा है यह है कि सुपर कन्स्ट्रक्टर बच्चे के शो() विधि को बुला रहा है क्योंकि इस विधि को बाल में ओवरराइड किया गया था। क्योंकि इसे ओवरराइड किया गया है लेकिन सुपर कन्स्ट्रक्टर पूरा होने से पहले x 0 का मान क्यों है और यह इस विधि तक पहुंचने में सक्षम क्यों है?
आभासी हैंडलिंग तंत्र एक वस्तु के निर्माण के दौरान सक्षम है? मुझे शक है कि यह नहीं है। – Mahesh
सी ++ में यह एक दुर्घटना का कारण बन सकता है। –
प्रभावी जावा एक महान जावा संसाधन है और यह इसमें बहुत विस्तार से जाता है। आइटम 17 से: "*** रचनाकारों को ओवरराइड करने योग्य तरीकों का आह्वान नहीं करना चाहिए **, सीधे या परोक्ष रूप से (...) यदि ओवरराइडिंग विधि सबक्लास कन्स्ट्रक्टर द्वारा किए गए किसी भी प्रारंभिकरण पर निर्भर करती है, तो विधि अपेक्षित व्यवहार नहीं करेगी ... * "यदि आपके पास हाथ की किताब है तो मैं इस आइटम को पढ़ने की अत्यधिक अनुशंसा करता हूं। –